import { BVAS_GEOGRAPHY_FILTERS } from './bvasInfo';
import { isRecord } from './users';

export interface BvasReport2 {
  id: string;
  geozone_id: string;
  state_id: string;
  lga_id: string;
  ward_id: string;
  pu_id: string;
  time: string;
  percentage: 1 | 2 | 3;
  note: string | null;
  image: string | null;
  updated_at: string;
}

export interface BvasReport2Page {
  data: BvasReport2[];
  meta: { current_page: number; last_page: number; per_page: number; total: number };
}

export function isBvasReport2(value: unknown): value is BvasReport2 {
  return isRecord(value) && typeof value.id === 'string' && value.id.length > 0 &&
    [...BVAS_GEOGRAPHY_FILTERS, 'time', 'updated_at'].every((field) => typeof value[field] === 'string') &&
    (value.percentage === 1 || value.percentage === 2 || value.percentage === 3) &&
    (value.note === null || typeof value.note === 'string') &&
    (value.image === null || typeof value.image === 'string');
}

export function isBvasReport2Page(value: unknown): value is BvasReport2Page {
  if (!isRecord(value) || !Array.isArray(value.data) || !value.data.every(isBvasReport2) || !isRecord(value.meta)) return false;
  const meta = value.meta;
  return ['current_page', 'last_page', 'per_page'].every((field) =>
    typeof meta[field] === 'number' && Number.isSafeInteger(meta[field]) && meta[field] >= 1) &&
    typeof meta.total === 'number' && Number.isSafeInteger(meta.total) && meta.total >= 0;
}

export function turnoutCategory(percentage: BvasReport2['percentage']) {
  return percentage === 1 ? 'High' : percentage === 2 ? 'Low' : 'Mid';
}
