import { create } from "zustand";
import { addSymptomApi, updateSymptomApi, removeSymptomApi } from "../services/symptomApi";
import { useMasterDataStore } from "./masterDataStore";
import { AddSymptomPayload, UpdateSymptomPayload } from "../types/medicalData";

interface SymptomState {
    loading: boolean;
    error: string | null;
    addSymptom: (payload: AddSymptomPayload) => Promise<boolean>;
    updateSymptom: (payload: UpdateSymptomPayload) => Promise<boolean>;
    removeSymptom: (id: string) => Promise<boolean>;
}

export const useSymptomStore = create<SymptomState>((set) => ({
    loading: false,
    error: null,

    addSymptom: async (payload) => {
        try {
            set({ loading: true, error: null });
            await addSymptomApi(payload);
            await useMasterDataStore.getState().fetchMasterData();
            set({ loading: false });
            return true;
        } catch (error: any) {
            set({ loading: false, error: error?.response?.data?.msg || error?.message || "Failed to add symptom" });
            return false;
        }
    },

    updateSymptom: async (payload) => {
        try {
            set({ loading: true, error: null });
            await updateSymptomApi(payload);
            await useMasterDataStore.getState().fetchMasterData();
            set({ loading: false });
            return true;
        } catch (error: any) {
            set({ loading: false, error: error?.response?.data?.msg || error?.message || "Failed to update symptom" });
            return false;
        }
    },

    removeSymptom: async (id) => {
        try {
            set({
                loading: true,
                error: null,
            });

            await removeSymptomApi(id);

            await useMasterDataStore
                .getState()
                .fetchMasterData();

            set({
                loading: false,
            });

            return true;
        } catch (error: any) {
            set({
                loading: false,
                error:
                    error?.response?.data?.msg ||
                    error?.message ||
                    "Failed to remove symptom",
            });

            return false;
        }
    },
}));