import { UserRole } from './auth';

export interface LgaRecord {
  id: string;
  name: string;
  state: string;
  coordinatorName: string;
  coordinatorPhone: string;
  coordinatorStatus: 'ACTIVE' | 'OFFLINE' | 'DISPATCH_SENT';
  totalWards: number;
  reportingWards: number;
  totalPUs: number;
  reportingPUs: number;
  turnoutPercentage: number;
  leadingParty: 'ADC' | 'APC' | 'PDP' | 'LP';
  adcVotes: number;
  apcVotes: number;
  rejectedBallots: number;
  section63Challenges: number;
  lastTransmission: string;
}

export interface WardRecord {
  id: string;
  name: string;
  lga: string;
  state: string;
  supervisorName: string;
  supervisorPhone: string;
  supervisorStatus: 'ACTIVE' | 'OFFLINE' | 'IN_TRANSIT';
  totalPUs: number;
  reportingPUs: number;
  puAgentsAccredited: number;
  admVotes: number;
  apcVotes: number;
  rejectedBallots: number;
  section63Interventions: number;
  ec8bFormStatus: 'COLLECTING' | 'SIGNED' | 'TRANSMITTED';
  lastTransmission: string;
}

export interface PuRecord {
  id: string;
  puCode: string;
  puName: string;
  ward: string;
  lga: string;
  state: string;
  agentName: string;
  agentPhone: string;
  agentBadgeId: string;
  agentStatus: 'ON_POST' | 'CHALLENGING_SECTION63' | 'TRANSMITTED_EC8A' | 'UNREACHABLE';
  registeredVoters: number;
  accreditedVoters: number;
  admVotes: number;
  apcVotes: number;
  lpVotes: number;
  pdpVotes: number;
  rejectedVotes: number;
  ec8aUploaded: boolean;
  ec8aImageUrl?: string;
  tamperAlert: boolean;
  lastTransmission: string;
}

// Anti-Fake Agent Registration & Vetting Protocol
export interface AgentRegistrationApplication {
  id: string;
  fullName: string;
  phone: string;
  nin: string; // 11-digit National Identity Number
  vin: string; // Voter Identification Number
  state: string;
  lga: string;
  ward: string;
  puCode: string;
  puName: string;
  membershipCardNumber: string; // ADC Party Card
  wardChairmanName: string;
  wardChairmanPhone: string;
  lgaCoordinatorEndorsement: boolean;
  facialPhotoUrl: string;
  status: 'PENDING_WARD_VETTING' | 'APPROVED' | 'FLAGGED_AS_SUSPECTED_INFILTRATOR' | 'REJECTED';
  verificationScore: number; // 0-100%
  vettingNotes: string;
  submissionDate: string;
  badgeId?: string;
  qrSecurityHash?: string;
}

export interface AntiFakeVerificationResult {
  isAuthentic: boolean;
  status: 'CERTIFIED_ACTIVE_AGENT' | 'PENDING_VERIFICATION' | 'FLAGGED_INFILTRATOR' | 'UNREGISTERED_IMPOSTOR';
  agent?: {
    fullName: string;
    badgeId: string;
    phone: string;
    role: UserRole;
    assignedPU: string;
    ward: string;
    lga: string;
    state: string;
    photoUrl: string;
    ninLast4: string;
    vinLast4: string;
    accreditationDate: string;
    securityHash: string;
  };
  warningMessage?: string;
}
