import { create } from "zustand";
import { getTemplatesApi, selectTemplateApi } from "../services/userApi";


export interface ApiTemplate {
    id: string;
    title: string;
    subtitle: string;
    thumbnail: string;
    isPremium: boolean;
    isActive: boolean;
    path: string;
    path_new: string;
    isRequiredDrInfo: boolean;
    allowedUserIds: string[];
}

interface TemplateStore {
    templates: ApiTemplate[];
    exclusiveTemplates: ApiTemplate[];       
    selectedTemplateId: string;
    selectedTemplateName: string;
    loading: boolean;
    selecting: boolean;
    fetchTemplates: () => Promise<void>;
    selectTemplate: (templateId: string, templateName: string) => Promise<boolean>;
    loadSelectedTemplate: () => void;
}

export const useTemplateStore = create<TemplateStore>((set) => ({
    templates: [],
    exclusiveTemplates: [],                    
    selectedTemplateId: "",
    selectedTemplateName: "",
    loading: false,
    selecting: false,

    loadSelectedTemplate: () => {
        const id   = localStorage.getItem("selected_template_id")   || "";
        const name = localStorage.getItem("selected_template_name") || "Regular";
        set({ selectedTemplateId: id, selectedTemplateName: name });
    },

    fetchTemplates: async () => {
        set({ loading: true });
        try {
            const res = await getTemplatesApi();
            if (res?.status === 1) {
                set({
                    templates: res.data,
                    exclusiveTemplates: res.exclusive ?? [],   // ← added
                });
            }
        } catch (err) {
            console.error("Failed to fetch templates:", err);
        } finally {
            set({ loading: false });
        }
    },

    selectTemplate: async (templateId, templateName) => {
        set({ selecting: true });
        try {
            const res = await selectTemplateApi(templateId);
            if (res?.status === 1) {
                localStorage.setItem("selected_template_id",   templateId);
                localStorage.setItem("selected_template_name", templateName);
                set({
                    selectedTemplateId:   templateId,
                    selectedTemplateName: templateName,
                });
                return true;
            }
            return false;
        } catch (err) {
            console.error("Failed to select template:", err);
            return false;
        } finally {
            set({ selecting: false });
        }
    },
}));