import { NetworkProxy } from "../../../drivers/network/typings"
import { IStorage } from "../../../drivers/storage/typings"
import { INudgesRepository, Nudge } from "./typings"
const SHOWN_NUDGES = 'bslog-shown-nudges'

export default class NudgesRepository implements INudgesRepository{
    private apiURL
    private networkDriver
    private storageDriver

    public constructor(url: string, bsNetwork: NetworkProxy, storageDriver: IStorage) {
        this.apiURL = url
        this.networkDriver = bsNetwork
        this.storageDriver = storageDriver
    }

    public markNudgeAsShown = (nudgeId: string): void => {
        const shownNudges = JSON.parse(this.storageDriver.get(SHOWN_NUDGES)) || []
        shownNudges.push(nudgeId)
        this.storageDriver.save(SHOWN_NUDGES, JSON.stringify(shownNudges))
    }

    public haveBeenAlreadyShown = (nudgeId: string): boolean => {
        const shownNudges = JSON.parse(this.storageDriver.get(SHOWN_NUDGES)) || []
        return shownNudges.includes(nudgeId)
    }

    public getNudges = async (userId: string): Promise<Nudge[]> => {
        const url = `${this.apiURL}/${userId}`

        const listOfNudges = (await this.networkDriver.get(`${url}`)) || []

        return listOfNudges
    }
}
