<?php
header('Content-Type: application/json; charset=utf-8');
require_once __DIR__ . '/../../../../backend/db/conexion.php';

try{
    $raw = file_get_contents('php://input');
    $data = json_decode($raw, true);
    if (!is_array($data) || empty($data['signatures'])){
        http_response_code(400);
        echo json_encode(['error' => 'Faltan firmas para justificar. Enviar {"signatures": ["...","..."]}']);
        exit;
    }
    $sigsToJustify = array_flip($data['signatures']); // lookup

    // Obtener todas las filas para comparar firmas
    $sql = "SELECT * FROM PreNominaIncidencias";
    $res = $conn->query($sql);
    if (!$res) throw new Exception('Error en consulta: ' . $conn->error);

    $rows = [];
    while($r = $res->fetch_assoc()) $rows[] = $r;

    if (empty($rows)){
        echo json_encode(['updated' => 0, 'message' => 'No hay filas en PreNominaIncidencias']);
        exit;
    }

    // detectar posible columna PK en la primera fila
    $first = $rows[0];
    $pkCandidates = ['id','ID','Id','pk','PK','clave','Clave','Key','KEY','key'];
    $pkCol = null;
    foreach($pkCandidates as $c) if (array_key_exists($c, $first)){ $pkCol = $c; break; }
    if (!$pkCol){
        // si no hay columna evidente, intentar cualquier columna que parezca numérica en todas las filas
        foreach(array_keys($first) as $k){ $allnum = true; foreach($rows as $rr) if (!is_numeric($rr[$k])) { $allnum = false; break; } if ($allnum){ $pkCol = $k; break; } }
    }

    if (!$pkCol){
        http_response_code(500);
        echo json_encode(['error' => 'No se detectó una columna PK en PreNominaIncidencias. No es posible actualizar filas de forma segura.']);
        exit;
    }

    // función para generar firma normalizada igual que en frontend
    function signature_normalized_from_row($r){
        $o = [];
        foreach($r as $k => $v) $o[strtolower($k)] = (string)($v ?? '');
        ksort($o);
        return json_encode($o, JSON_UNESCAPED_UNICODE);
    }

    $toUpdate = [];
    foreach($rows as $r){
        $sig = signature_normalized_from_row($r);
        if (isset($sigsToJustify[$sig])){
            $toUpdate[] = $r[$pkCol];
        }
    }

    if (empty($toUpdate)){
        echo json_encode(['updated' => 0, 'message' => 'No se encontraron filas que coincidan con las firmas proporcionadas.']);
        exit;
    }

    // Preparar lista para IN
    $ids = array_map(function($v){ return intval($v); }, $toUpdate);
    $inList = implode(',', $ids);

    $updateSql = "UPDATE PreNominaIncidencias SET Resultado = 'Justificado RRHH' WHERE $pkCol IN ($inList)";
    $u = $conn->query($updateSql);
    if (!$u) throw new Exception('Error al actualizar: ' . $conn->error);

    echo json_encode(['updated' => $conn->affected_rows, 'pk_column' => $pkCol]);

} catch(Exception $ex){
    http_response_code(500);
    echo json_encode(['error' => 'Excepción', 'message' => $ex->getMessage()]);
}

?>
