import { create } from "zustand";
import { addDiagnosisApi, updateDiagnosisApi, removeDiagnosisApi } from "../services/diagnosisApi";
import { useMasterDataStore } from "./masterDataStore";
import { AddDiagnosisPayload, UpdateDiagnosisPayload } from "../types/medicalData";

interface DiagnosisState {
    loading: boolean;
    error: string | null;
    addDiagnosis:    (payload: AddDiagnosisPayload)    => Promise<boolean>;
    updateDiagnosis: (payload: UpdateDiagnosisPayload) => Promise<boolean>;
    removeDiagnosis: (id: string)                      => Promise<boolean>;
}

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

    addDiagnosis: async (payload) => {
        try {
            set({ loading: true, error: null });
            await addDiagnosisApi(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 diagnosis" });
            return false;
        }
    },

    updateDiagnosis: async (payload) => {
        try {
            set({ loading: true, error: null });
            await updateDiagnosisApi(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 diagnosis" });
            return false;
        }
    },

    removeDiagnosis: async (id) => {
        try {
            set({ loading: true, error: null });
            await removeDiagnosisApi(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 diagnosis" });
            return false;
        }
    },
}));