import { QueryKeys } from "@/enums/QueryKeys";
import { useQuery } from "@tanstack/react-query";
import type { Warehouse } from "./WarehouseQuery";
import type { Unit } from "./UnitsQuery";
import type { ResponseType } from "@/types/types";
import {
    getAllMenuItems,
    getSingleMenuItem,
} from "@/utils/apiFunctions/menuItemApiFuntion";
import type { Store } from "./StoresQuery";
import type { StoreInventory } from "./StoreInventoryQuery";

// type Ingredient = {
//     id: number;
//     menu_item_id: number;
//     item_id: number;
//     quantity: number;
//     unit_symbol: string;
//     created_at: string;
//     updated_at: string;
//     item: {
//         id: number;
//         name: string;
//         item_code: string;
//     };
// };

export type MenuItem = {
    id: number;
    store_id: number;
    name: string;
    item_code: string;
    store_name?: string;
    is_active: boolean;
    created_at: number;
    updated_at: number;
    ingredients_count: number;
    image: string;
    image_path: string;
    image_url: string;
    unit_id: number;
    store: Store;
    warehouse: Warehouse;
    unit: Unit;
    ingredients: {
        id: number;
        menu_item_id: number;
        store_inventory_item_id: number;
        item_branch_id: number;
        quantity: number;
        unit_id: number;
        created_at: string;
        updated_at: string;
        store_inventory_item: StoreInventory;
        unit: Unit;
    }[];
};

type ResponseMenuItems = ResponseType & {
    data: MenuItem[];
};

type ResponseSingleMenuItem = ResponseType & {
    data: MenuItem;
};

export const useMenuItemQuery = () =>
    useQuery<MenuItem[], Error>({
        queryKey: [QueryKeys.menuItems.allMenuItems],
        queryFn: async () => {
            const res: ResponseMenuItems = await getAllMenuItems();
            return res.data;
        },
    });

export const useStoreMenuItemsQuery = (
    keyword?: string,
    statusFilter?: "all" | "active" | "inactive",
    storeId?: number
) =>
    useQuery<MenuItem[], Error>({
        queryKey: [QueryKeys.menuItems.allMenuItems, keyword, statusFilter, storeId],
        queryFn: async () => {
            const params = new URLSearchParams();
            if (keyword) params.append('keyword', keyword);
            if (statusFilter && statusFilter !== 'all') {
                params.append('is_active', statusFilter === 'active' ? '1' : '0');
            }
            if (storeId) params.append('store_id', storeId.toString());

            const res: ResponseMenuItems = await getAllMenuItems(params.toString());
            return res.data;
        },
    });

export const useSingleMenuItemQuery = (itemID: number | undefined) =>
    useQuery<MenuItem, Error>({
        queryKey: [QueryKeys.menuItems.singleMenuItem, { menuItemID: itemID }],
        queryFn: async () => {
            const res: ResponseSingleMenuItem = await getSingleMenuItem(itemID);
            return res.data;
        },
    });
