import type { StatusMessenger } from '../../core/StatusMessenger';

export class ChangeTracker {
    private hasChangesFlag: boolean = false;
    private autoSaveTimeout: number | null = null;
    private saveCallback: () => Promise<void>;
    private statusMessenger: StatusMessenger;

    constructor(saveCallback: () => Promise<void>, statusMessenger: StatusMessenger) {
        this.saveCallback = saveCallback;
        this.statusMessenger = statusMessenger;
    }

    public markChanged(): void {
        this.hasChangesFlag = true;
        this.statusMessenger.show('Non sauvegardé', 'warning');

        if (this.autoSaveTimeout !== null) {
            clearTimeout(this.autoSaveTimeout);
        }

        this.autoSaveTimeout = window.setTimeout(() => {
            this.saveCallback();
        }, 30000);
    }

    public markSaved(): void {
        this.hasChangesFlag = false;
        if (this.autoSaveTimeout !== null) {
            clearTimeout(this.autoSaveTimeout);
            this.autoSaveTimeout = null;
        }
    }

    public hasChanges(): boolean {
        return this.hasChangesFlag;
    }

    public destroy(): void {
        if (this.autoSaveTimeout !== null) {
            clearTimeout(this.autoSaveTimeout);
        }
    }
}
