import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import api from '@/lib/api-client';

export interface AnonymousReport {
  id: number;
  description: string;
  media_path: string | null;
  media_type: 'image' | 'video' | 'audio' | null;
  is_read: boolean;
  created_at: string;
  latitude?: number;
  longitude?: number;
  accuracy?: number;
  region?: string;
  address?: string;
}

export interface RegionStats {
  region: string;
  total_reports: number;
  unread_reports: number;
  image_reports: number;
  video_reports: number;
  audio_reports: number;
  text_only_reports: number;
  earliest_report: string;
  latest_report: string;
}

export interface ReportStats {
  regions: RegionStats[];
  totals: {
    total: number;
    unread: number;
    unique_regions: number;
  };
  trend: { report_date: string; count: number }[];
  filters: {
    date_from: string;
    date_to: string;
  };
}

export function useAnonymousReportsAdmin(region?: string) {
  const queryClient = useQueryClient();

  const query = useQuery({
    queryKey: ['anonymous-reports', region],
    queryFn: async () => {
      const params = region ? { region } : {};
      const response = await api.get('/anonymous-reports', { params });
      return response.data.data as AnonymousReport[];
    },
  });

  const markAsRead = useMutation({
    mutationFn: async (id: number) => {
      await api.patch(`/anonymous-reports/${id}/read`);
    },
    onSuccess: () => {
      queryClient.invalidateQueries({ queryKey: ['anonymous-reports'] });
    },
  });

  return {
    ...query,
    markAsRead,
  };
}

export function useReportStats(dateFrom?: string, dateTo?: string) {
  return useQuery({
    queryKey: ['anonymous-reports-stats', dateFrom, dateTo],
    queryFn: async () => {
      const params: any = {};
      if (dateFrom) params.date_from = dateFrom;
      if (dateTo) params.date_to = dateTo;
      const response = await api.get('/anonymous-reports/stats', { params });
      return response.data as ReportStats;
    },
  });
}

export function useReportRegions() {
  return useQuery({
    queryKey: ['anonymous-reports-regions'],
    queryFn: async () => {
      const response = await api.get('/anonymous-reports/regions');
      return response.data.regions as { region: string; count: number }[];
    },
  });
}

export function useReportsByRegion(region: string) {
  return useQuery({
    queryKey: ['anonymous-reports-by-region', region],
    queryFn: async () => {
      const response = await api.get(`/anonymous-reports/region/${encodeURIComponent(region)}`);
      return response.data;
    },
    enabled: !!region,
  });
}
