import { useQuery } from '@tanstack/react-query';
import {
  RegrasVigentesResponseSchema,
  PromocoesVigentesResponseSchema,
  AlcadaRepResponseSchema,
  type RegrasVigentesResponse,
  type PromocoesVigentesResponse,
  type AlcadaRepResponse,
} from '@sar/api-interface';
import { apiFetch } from '../api-client';

// Regras de desconto vigentes para o usuário logado (rep recebe só as suas).
// Usadas na montagem do pedido para pré-aplicar o desconto liberado pelo gerente.
export function useRegrasVigentes() {
  return useQuery<RegrasVigentesResponse>({
    queryKey: ['politicas', 'regras-vigentes'],
    queryFn: async () => {
      const raw = await apiFetch('/politicas/regras/vigentes');
      return RegrasVigentesResponseSchema.parse(raw);
    },
    staleTime: 5 * 60 * 1000,
  });
}

// Alçada do usuário logado — teto de desconto por item no carrinho
export function useMinhaAlcada() {
  return useQuery<AlcadaRepResponse>({
    queryKey: ['politicas', 'minha-alcada'],
    queryFn: async () => {
      const raw = await apiFetch('/politicas/alcada');
      return AlcadaRepResponseSchema.parse(raw);
    },
    staleTime: 5 * 60 * 1000,
  });
}

// Promoções vigentes hoje — sinalizam condição comercial no catálogo do rep
export function usePromocoesVigentes() {
  return useQuery<PromocoesVigentesResponse>({
    queryKey: ['politicas', 'promocoes-vigentes'],
    queryFn: async () => {
      const raw = await apiFetch('/politicas/promocoes/vigentes');
      return PromocoesVigentesResponseSchema.parse(raw);
    },
    staleTime: 5 * 60 * 1000,
  });
}
