<?php
/**
 * SAC 2025 - SAVE EXCHANGE RATE
 * Persistencia de tasas de cambio AM/PM en la base de datos local.
 */
require_once 'config.php';

// Verificación de seguridad: Solo niveles administrativos
try {
    checkAccess(['admin', 'programmer', 'board']);
} catch (Exception $e) {
    response(["error" => "No autorizado"], 401);
}

$data = json_decode(file_get_contents("php://input"), true);

if (!$data || !isset($data['date'])) {
    response(["error" => "Datos de fecha no proporcionados"], 400);
}

$date = $data['date'];

try {
    // Caso 1: Sincronización automática o manual por slot específico
    if (isset($data['value']) && isset($data['slot'])) {
        $value = (float)$data['value'];
        $slotField = ($data['slot'] === 'pm') ? 'pm_value' : 'am_value';
        $parallelValue = isset($data['parallel_value']) ? (float)$data['parallel_value'] : $value;
        
        $sql = "INSERT INTO exchange_rates (date, $slotField, parallel_value) 
                VALUES (:date, :val, :pVal) 
                ON DUPLICATE KEY UPDATE $slotField = :val_upd, parallel_value = :pVal_upd";
        
        $stmt = $pdo->prepare($sql);
        $stmt->execute([
            ':date' => $date,
            ':val' => $value,
            ':pVal' => $parallelValue,
            ':val_upd' => $value,
            ':pVal_upd' => $parallelValue
        ]);
        logSystemAction("ACTUALIZÓ TASA ($slotField): $value Bs/$ | Paralela: $parallelValue", "TASAS");
    } 
    // Caso 2: Edición completa desde el historial (envía amValue, pmValue y parallelValue)
    else if (array_key_exists('amValue', $data) || array_key_exists('pmValue', $data) || array_key_exists('parallelValue', $data)) {
        $am = isset($data['amValue']) ? (float)$data['amValue'] : 0;
        $pm = isset($data['pmValue']) ? (float)$data['pmValue'] : 0;
        $parallel = isset($data['parallelValue']) ? (float)$data['parallelValue'] : $pm;
        
        $sql = "INSERT INTO exchange_rates (date, am_value, pm_value, parallel_value) 
                VALUES (:date, :am, :pm, :parallel) 
                ON DUPLICATE KEY UPDATE am_value = :am_upd, pm_value = :pm_upd, parallel_value = :parallel_upd";
        
        $stmt = $pdo->prepare($sql);
        $stmt->execute([
            ':date' => $date,
            ':am' => $am,
            ':pm' => $pm,
            ':parallel' => $parallel,
            ':am_upd' => $am,
            ':pm_upd' => $pm,
            ':parallel_upd' => $parallel
        ]);
        logSystemAction("EDITÓ TASAS HISTÓRICAS ($date): AM:$am PM:$pm PAR:$parallel", "TASAS");
    } else {
        response(["error" => "No se recibieron valores de tasa válidos"], 400);
    }

    response([
        "success" => true, 
        "message" => "Tasa registrada correctamente para la fecha: " . $date
    ]);

} catch (PDOException $e) {
    response([
        "error" => "Error de Base de Datos",
        "details" => $e->getMessage()
    ], 500);
}
?>