import {NetworkProxy} from "../../../drivers/network/typings"
import {IStorage} from "../../../drivers/storage/typings"
import {ActionAPIResponse, INudgesRepository, NudgeResponseItem} from "./typings"
import {NudgeScreenType} from "../../commonTypes";
import {getLocalStorageUserId} from "../../../drivers/CfSystem";

const SHOWN_NUDGES = 'cfLog-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, nudgeScreenType: NudgeScreenType): Promise<NudgeResponseItem[]> => {
        const userIdValue = userId || getLocalStorageUserId()
        if (!userIdValue) {
            return []
        }
        const requestObject = {
            render_method: "in_app_message",
            type: "message",
            delivery_mode: "one-off",
            user_id: userIdValue,
            ...(nudgeScreenType !== NudgeScreenType.None
                ? {attr: {render_page: nudgeScreenType}}
                : {})
        };
        // await this.networkDriver.send(`${this.apiURL}`, requestObject)
        // return getPayload().data

        const response = await this.networkDriver.send(`${this.apiURL}`, requestObject)
        if (!response || !response.data || !response.data.data) {
            return []
        }
        return response.data.data
    }
}

function getPayload(): ActionAPIResponse {

    return {
        data: [
            {
                payload: {
                    type: "message",
                    render_method: "in_app_message",
                    delivery_mode: "one-off",
                    content: {
                        body: "and some text here",
                        title: "some text here"
                    },
                    attr: {
                        "cta_type": "redirect",
                        "cta_id": "11"
                    },
                    tags: null,
                    internal: {
                        inv_id: 44,
                        action_id: 32,
                        ref_time: "2025-10-14T15:32:00Z",
                        expired_at: "2026-10-16T15:32:00Z",
                        followup_of_ref: "0001-01-01T00:00:00Z",
                        template_vals: null
                    }
                },
                error: null
            }
        ]
    }

    // return {
    //     data: [
    //         {
    //             payload: {
    //                 type: "message",
    //                 render_method: "in_app_message",
    //                 content: {
    //                     body: "Hello World of Kenkai",
    //                     title: "Hello World"
    //                 },
    //                 attr: {
    //                     render_page: "home",
    //                     cta_type: "redirect",
    //                     cta_id: "ABCD"
    //                 },
    //                 internal: {
    //                     inv_id: 9,
    //                     ref_time: "2025-09-02T16:43:00Z",
    //                     action_id: 2,
    //                     expired_at: "2025-09-14T16:43:00Z",
    //                     model_class: "",
    //                     model_id: 0,
    //                     followup_of: 0,
    //                     followup_of_ref: "0001-01-01T00:00:00Z"
    //                 }
    //             },
    //             error: null
    //         }
    //     ]
    // };
}
