<?php
/**
 * csvSubirCandidatosController.php — Sprint 4
 * + Usa candidatos.php en lugar de candidatosAdmin.php
 * + Instancia modelo UNA vez fuera del loop (eliminado N+1)
 */
namespace app\controller\administradores;

use app\models\candidatos;

header('Content-Type: text/html; charset=utf-8');

require_once '../../../app/models/candidatos.php';

$targetFile = basename($_FILES["fileToUpload"]["name"]);
$fileType   = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));

if ($fileType != "csv") {
    echo "Solo se permiten archivos CSV.";
    exit;
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) {
        processCSV($targetFile);
        header("Location: ../../../administradores/admin.php?success=Candidatos+cargados");
        exit;
    } else {
        echo "Hubo un error subiendo el archivo.";
        exit;
    }
}

function processCSV($filePath) {
    // Sprint 4: UNA sola instancia del modelo (antes: 1 por fila = N+1)
    $candidatosModel = new candidatos();
    $fileHandle = fopen($filePath, "r");

    while (($data = fgetcsv($fileHandle, 1000, ",")) !== FALSE) {
        foreach ($data as $index => $field) {
            $data[$index] = mb_convert_encoding($field, 'UTF-8', 'Windows-1252');
        }

        if (count($data) < 7) {
            continue;
        }

        $candidatosModel->subirCandidatos($data[0], $data[1], $data[2], $data[3], $data[4], $data[5], $data[6]);
    }
    fclose($fileHandle);
}
