<?php
include_once '../config/database.php';

header('Content-Type: application/json');

try {
    $database = new Database();
    $conn = $database->getConnection();

    session_start();
    $codempleadoSesion = $_SESSION['user']['codempleado'] ?? null;

    $codcronogramaequipo = isset($_POST['codcronogramaequipo']) ? intval($_POST['codcronogramaequipo']) : 0;
    $equipo_id = isset($_POST['equipo_id']) ? intval($_POST['equipo_id']) : 0;
    $monto = isset($_POST['monto']) && $_POST['monto'] !== '' ? $_POST['monto'] : null;
    $pagadofecha = isset($_POST['pagadofecha']) && $_POST['pagadofecha'] !== '' ? $_POST['pagadofecha'] : null;
    $defaultMonto = null;

    if (!$codcronogramaequipo || !$equipo_id) {
        throw new Exception('Datos insuficientes');
    }

    // Si no viene monto, obtenerlo desde plan_a_evaluar del equipo
    if ($monto === null) {
        $stmtPlan = $conn->prepare("SELECT plan_a_evaluar FROM timportequipos WHERE id = ?");
        $stmtPlan->execute([$equipo_id]);
        $plan = $stmtPlan->fetch(PDO::FETCH_ASSOC)['plan_a_evaluar'] ?? null;

        if ($plan === null || $plan === '') {
            throw new Exception('No se encontró el plan a evaluar para calcular el monto');
        }

        // Extraer decimal del texto de plan; si no hay, intentar parsear directamente
        if (preg_match('/([0-9]+(?:\.[0-9]+)?)/', $plan, $m)) {
            $monto = $m[1];
        } else {
            // Reemplazar posibles comas por puntos
            $monto = str_replace(',', '.', $plan);
            if (!is_numeric($monto)) {
                throw new Exception('El campo plan_a_evaluar no contiene un valor numérico');
            }
        }
        $defaultMonto = $monto;
    }

    // Normalizar monto a formato decimal 10,2
    $monto = number_format((float)$monto, 2, '.', '');
    if ($defaultMonto === null) {
        $defaultMonto = $monto; // si vino monto manual, úsalo como base para comparación posterior
    } else {
        $defaultMonto = number_format((float)$defaultMonto, 2, '.', '');
    }

    // Si no viene pagadofecha, usar fecha actual de Lima, Perú
    if ($pagadofecha === null || $pagadofecha === '') {
        $tz = new DateTimeZone('America/Lima');
        $now = new DateTime('now', $tz);
        $pagadofecha = $now->format('Y-m-d');
    }

    // Validar existencia del registro
    $stmtCheck = $conn->prepare("SELECT codcronogramaequipo FROM tcronogramaequipo WHERE codcronogramaequipo = ? AND ID = ?");
    $stmtCheck->execute([$codcronogramaequipo, $equipo_id]);
    if (!$stmtCheck->fetch(PDO::FETCH_ASSOC)) {
        throw new Exception('Registro de cronograma no encontrado');
    }

    // Regla: monto no puede ser menor al default (plan del equipo)
    // Si el usuario envió un monto explícito, comparar contra plan del equipo
    if (isset($_POST['monto']) && $_POST['monto'] !== '') {
        // Recuperar plan del equipo (si no lo tenemos)
        if ($defaultMonto === null) {
            $stmtPlan = $conn->prepare("SELECT plan_a_evaluar FROM timportequipos WHERE id = ?");
            $stmtPlan->execute([$equipo_id]);
            $plan = $stmtPlan->fetch(PDO::FETCH_ASSOC)['plan_a_evaluar'] ?? null;
            if ($plan !== null) {
                if (preg_match('/([0-9]+(?:\.[0-9]+)?)/', $plan, $m)) {
                    $defaultMonto = number_format((float)$m[1], 2, '.', '');
                } else {
                    $try = number_format((float)str_replace(',', '.', $plan), 2, '.', '');
                    $defaultMonto = $try;
                }
            }
        }
        if ($defaultMonto !== null && (float)$monto < (float)$defaultMonto) {
            throw new Exception('El monto ingresado no puede ser menor al monto por defecto del plan.');
        }
    }

    // Actualizar campos monto, pagadofecha, estado = PAGADO y codempleado del usuario
    $estado = 'PAGADO';
    $codempleadoGuardar = $codempleadoSesion !== null ? intval($codempleadoSesion) : null;
    $stmtUpd = $conn->prepare("UPDATE tcronogramaequipo SET monto = ?, pagadofecha = ?, estado = ?, codempleado = ? WHERE codcronogramaequipo = ?");
    $stmtUpd->execute([$monto, $pagadofecha, $estado, $codempleadoGuardar, $codcronogramaequipo]);

    echo json_encode(['success' => true]);
} catch (Exception $e) {
    echo json_encode(['success' => false, 'message' => $e->getMessage()]);
}
?>


