import { defineStore } from 'pinia'
import type { UserData } from '~/services/dto/user-data'
import { getCurrentUser, login, logout } from '~/services/auth'

export const useAuthStore = defineStore('auth', {
    state: () => ({
        user: null as UserData | null,
        isLoading: false,
        checked: false
    }),
    getters: {
        isAuthenticated: (state) => Boolean(state.user)
    },
    actions: {
        clearSession() {
            this.user = null
            this.checked = true
            this.isLoading = false
        },
        async ensureSession() {
            if (this.checked) {
                return this.user
            }

            this.checked = true

            try {
                const me = await getCurrentUser()
                this.user = me
                return me
            } catch {
                this.user = null
                return null
            }
        },
        async login(username: string, password: string) {
            this.isLoading = true

            try {
                await login(username, password)
                const me = await getCurrentUser()
                this.user = me
                this.checked = true
                return me
            } finally {
                this.isLoading = false
            }
        },
        async logout() {
            this.isLoading = true

            try {
                await logout()
            } catch {
                // Ignore logout errors so we can still clear local auth state.
            } finally {
                this.user = null
                this.checked = true
                this.isLoading = false
            }
        }
    }
})
