import type { ApiResponse, Diario, SearchParams } from '@/app/models';
import { QueryClient } from '@tanstack/react-query';

const mockDiarios: Diario[] = [
  {
    id: 1,
    data: '02/12/2024',
    titulo: 'Diário Oficial nº 2456',
    descricao: 'Publicações oficiais do município',
    tamanho: '4.2 MB',
  },
  {
    id: 2,
    data: '01/12/2024',
    titulo: 'Diário Oficial nº 2455',
    descricao: 'Atos administrativos e licitações',
    tamanho: '3.8 MB',
  },
];

export const diarioApi = {
  async buscarDiarios(
    params: Partial<SearchParams> = {},
  ): Promise<ApiResponse<Diario[]>> {
    await new Promise((resolve) => setTimeout(resolve, 300));

    let filtered = [...mockDiarios];

    if (params.entidade) {
      filtered = filtered.filter((d) => d.entidade === params.entidade);
    }

    if (params.palavraChave) {
      const keyword = params.palavraChave.toLowerCase();
      filtered = filtered.filter(
        (d) =>
          d.titulo.toLowerCase().includes(keyword) ||
          d.descricao.toLowerCase().includes(keyword),
      );
    }

    return {
      data: filtered,
      total: filtered.length,
      page: 1,
      limit: 20,
    };
  },

  async buscarDiarioPorId(id: number): Promise<Diario> {
    const diario = mockDiarios.find((d) => d.id === id);
    if (!diario) throw new Error('Diário não encontrado');
    return diario;
  },

  async buscarUltimosDiarios(limit: number = 6): Promise<Diario[]> {
    return mockDiarios.slice(0, limit);
  },
};

export const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      refetchOnWindowFocus: true,
      staleTime: 1000 * 30,
    },
  },
});
