<?php

namespace app\models;

use PDO;

class candidatos extends conexion
{
    public function listaCandidatosZona($zona)
    {
        $db = $this->DB();
        $query = $db->prepare("SELECT * FROM `candidatos` WHERE `zona` =:zona");
        $query->bindParam("zona", $zona);
        $query->execute();
        return $query->fetchAll(PDO::FETCH_OBJ);
    }

    public function planchas($idPlancha)
    {
        $db = $this->DB();
        $query = $db->prepare("SELECT * FROM `cp_candidatos_planchas` WHERE `id_plancha`=:id_plancha");
        $query->bindParam("id_plancha", $idPlancha);
        $query->execute();
        return $query->fetchAll(PDO::FETCH_OBJ);
    }

    public function zonas()
    {
        $db = $this->DB();
        $query = $db->prepare("SELECT DISTINCT(zona) FROM `candidatos`");
        $query->execute();
        return $query->fetchAll(PDO::FETCH_OBJ);
    }

    public function subirCandidatos($id, $numero, $nombre, $empresa, $cedula, $zona, $descripcion)
    {
        $db = $this->DB();
        $query = $db->prepare("INSERT INTO `candidatos` (id, numero, nombre, empresa, cedula, zona, descripcion) VALUES (:id, :numero, :nombre, :empresa, :cedula, :zona, :descripcion)");
        $query->bindParam("id", $id);
        $query->bindParam("numero", $numero);
        $query->bindParam("nombre", $nombre);
        $query->bindParam("empresa", $empresa);
        $query->bindParam("cedula", $cedula);
        $query->bindParam("zona", $zona);
        $query->bindParam("descripcion", $descripcion);
        return $query->execute();
    }

    public function limpiarCandidatos()
    {
        $db = $this->DB();
        $query = $db->prepare("TRUNCATE TABLE candidatos");
        return $query->execute();
    }

    /**
     * Sprint 10B: Carga las planchas de múltiples candidatos en una sola query
     * Elimina el N+1 del foreach en candidatos.php
     * @param array $ids Array de candidato IDs
     * @return array [candidato_id => [planchas]]
     */
    public function planchasBatch(array $ids): array
    {
        if (empty($ids)) return [];
        $db = (new \app\models\conexion())->DB();
        $placeholders = implode(',', array_fill(0, count($ids), '?'));
        $stmt = $db->prepare(
            "SELECT cp.numero, cp.nombre, cp.suplente, cp.candidato_id
             FROM cp_candidatos_planchas cp
             WHERE cp.candidato_id IN ($placeholders)
             ORDER BY cp.candidato_id, cp.numero"
        );
        $stmt->execute(array_values($ids));
        $result = [];
        foreach ($stmt->fetchAll(\PDO::FETCH_OBJ) as $row) {
            $result[$row->candidato_id][] = $row;
        }
        return $result;
    }

}