import { Constants } from '@/constants/Constants'
import { createSlice, PayloadAction } from '@reduxjs/toolkit'
import { LocationObject } from 'expo-location'

interface LocationState {
  lastOwnLocation: LocationObject | null
  lastSentLocation: LocationObject | null
  queuedLocations: LocationObject[]
}

const initialState: LocationState = {
  lastOwnLocation: null,
  lastSentLocation: null,
  queuedLocations: []
}

export const locationSlice = createSlice({
  name: 'location',
  initialState: initialState,
  reducers: {
    setLastLocation: (state, action: PayloadAction<LocationObject>) => {
      const location: LocationObject = action.payload
      state.lastOwnLocation = location
      if (state.lastSentLocation === null || (location.timestamp - state.lastSentLocation.timestamp) >= Constants.MIN_DELAY_LOCATION_SENT * 1000) {
        state.lastSentLocation = location
        state.queuedLocations.push(location)
      }
    },
    unqueueLocation: (state, action: PayloadAction<LocationObject>) => {
      state.queuedLocations.pop()
    },
  },
})

export const { setLastLocation, unqueueLocation } = locationSlice.actions

export default locationSlice.reducer