export default class AuthService {

    constructor({ api, store, eventBus }) {
        this.api      = api;
        this.store    = store;
        this.eventBus = eventBus;
    }

    async login(credentials) {
        try {
            const result = await this.api.post('/auth/login', credentials);

            if (result?.token) {
                sessionStorage.setItem('acc_token', result.token);
            }

            this.store.set('auth.user',     result.user);
            this.store.set('auth.loggedIn', true);

            this.eventBus.emit('auth:login_success', result.user);

            // به ویجت چت اطلاع بده که لاگین شد → ویجت را پنهان کن
            window.dispatchEvent(new Event('erp:login'));

            return result;

        } catch (error) {
            this.eventBus.emit('auth:login_failed', error);
            throw error;
        }
    }

    async logout() {
        try {
            await this.api.post('/auth/logout');
        } catch (_) {
            // ignore logout errors
        }

        sessionStorage.removeItem('acc_token');

        this.store.set('auth.user',     null);
        this.store.set('auth.loggedIn', false);

        this.eventBus.emit('auth:logout');

        // به ویجت چت اطلاع بده که logout شد → ویجت را نشان بده
        window.dispatchEvent(new Event('erp:logout'));
    }

    async checkSession() {
        try {
            const result = await this.api.get('/auth/session');

            this.store.set('auth.user',     result.user);
            this.store.set('auth.loggedIn', true);

            return true;

        } catch (e) {
            sessionStorage.removeItem('acc_token');
            this.store.set('auth.loggedIn', false);
            return false;
        }
    }
}
