import { defineStore } from 'pinia'
import { getDashboard, getNextSmokeTime } from '@/api/smoke'

export const useDashboardStore = defineStore('dashboard', {
	state: () => ({
		todayCount: 0,
		minutesSinceLast: 0,
		weekly: [],
		nextSmokeTime: null,
		lastFetchTime: 0,
		cacheExpiry: 30 * 1000,
		loading: false
	}),

	getters: {
		isCacheValid: (state) => {
			return Date.now() - state.lastFetchTime < state.cacheExpiry
		}
	},

	actions: {
		async fetchDashboard(forceRefresh = false) {
			if (!forceRefresh && this.isCacheValid) {
				return
			}

			this.loading = true
			try {
				const res = await getDashboard()
				this.todayCount = res.data.today_count || 0
				this.minutesSinceLast = res.data.minutes_since_last || 0
				this.weekly = res.data.weekly || []
				this.lastFetchTime = Date.now()
			} catch (e) {
				console.error('fetchDashboard error:', e)
				throw e
			} finally {
				this.loading = false
			}
		},

		async fetchNextSmokeTime() {
			try {
				const res = await getNextSmokeTime()
				this.nextSmokeTime = res.data
				return res.data
			} catch (e) {
				console.error('fetchNextSmokeTime error:', e)
				throw e
			}
		},

		setDashboard(data) {
			this.todayCount = data.today_count || 0
			this.minutesSinceLast = data.minutes_since_last || 0
			this.weekly = data.weekly || []
			this.lastFetchTime = Date.now()
		},

		setNextSmokeTime(data) {
			this.nextSmokeTime = data
		},

		incrementTodayCount() {
			this.todayCount++
		},

		resetTimer() {
			this.minutesSinceLast = 0
		}
	}
})
