<?php
// backend/reingresos/insert_aspirante_reingreso.php
session_start();
require_once '../db/conexion.php';
header('Content-Type: application/json');

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    echo json_encode(['error' => 'Método no permitido']);
    exit;
}

$input = json_decode(file_get_contents('php://input'), true);
$curp = isset($input['curp']) ? strtoupper(trim($input['curp'])) : null;
$correo = isset($input['correo']) ? trim($input['correo']) : null;
$telefono = isset($input['telefono']) ? trim($input['telefono']) : null;
$attuid = isset($input['attuid']) ? trim($input['attuid']) : null;
$usuario = $_SESSION['attuid'] ?? $_SESSION['nombre_usuario'] ?? 'Sistema';

if (!$curp || !$correo || !$telefono || !$attuid) {
    http_response_code(400);
    echo json_encode(['error' => 'Faltan datos requeridos']);
    exit;
}

// Obtener datos de Plantilla
$stmt = $conn->prepare('SELECT NOMBRES, `APELLIDO PATERNO`, `APELLIDO MATERNO`, CURP, NSS, RFC FROM Plantilla WHERE CURP = ?');
$stmt->bind_param('s', $curp);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows === 0) {
    http_response_code(404);
    echo json_encode(['error' => 'CURP no encontrado en Plantilla']);
    exit;
}
$row = $result->fetch_assoc();
$stmt->close();

// Obtener datos financieros de Plantilla_datos_financieros
$stmt_fin = $conn->prepare('SELECT Folio_pre_alta_idse, Fecha_pre_alta, Folio_idse, Fecha_alta_idse, Folio_pre_baja_idse, Fecha_pre_baja, Folio_idse_baja, Fecha_baja_idse FROM Plantilla_datos_financieros WHERE CURP = ?');
$stmt_fin->bind_param('s', $curp);
$stmt_fin->execute();
$result_fin = $stmt_fin->get_result();
$fin = $result_fin->fetch_assoc();
$stmt_fin->close();

// Generar folio: número consecutivo + 25 + REING
$queryFolio = $conn->query('SELECT MAX(id) AS max_id FROM aspirantes');
$maxId = 0;
if ($queryFolio && $rowFolio = $queryFolio->fetch_assoc()) {
    $maxId = intval($rowFolio['max_id']) + 1;
}
$folio = $maxId . '25REING';
$puesto = 'Reingreso';
$estatus_actual = 'revision';

$conn->begin_transaction();
try {
    $stmt = $conn->prepare('INSERT INTO aspirantes (folio, nombre, apellido_paterno, apellido_materno, curp, nss, rfc, correo, telefono, puesto, fecha_registro, attuid, estatus_actual) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), ?, ?)');
    if (!$stmt) {
        throw new Exception('No se pudo preparar la insercion de aspirante');
    }
    $stmt->bind_param('ssssssssssss', $folio, $row['NOMBRES'], $row['APELLIDO PATERNO'], $row['APELLIDO MATERNO'], $row['CURP'], $row['NSS'], $row['RFC'], $correo, $telefono, $puesto, $attuid, $estatus_actual);
    if (!$stmt->execute()) {
        $errorCode = $stmt->errno;
        $stmt->close();
        if ($errorCode === 1062) {
            throw new Exception('Correo ya registrado');
        }
        throw new Exception('No se pudo insertar el aspirante');
    }
    $stmt->close();
  
    $aspiranteId = $conn->insert_id;

    $stmtReingreso = $conn->prepare('INSERT INTO reingresos (CURP, alta1, baja1, comentarioBaja1, Folio_pre_alta_idse, Fecha_pre_alta, Folio_idse, Fecha_alta_idse, Folio_pre_baja_idse, Fecha_pre_baja, Folio_idse_baja, Fecha_baja_idse) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
    if (!$stmtReingreso) {
        throw new Exception('No se pudo preparar la insercion de reingreso');
    }
    $stmtReingreso->bind_param(
        'ssssssssssss',
        $curp,
        $row['FECHA DE INGRESO'],
        $row['Fecha Baja'],
        $row['ComentarioBaja'],
        $fin['Folio_pre_alta_idse'],
        $fin['Fecha_pre_alta'],
        $fin['Folio_idse'],
        $fin['Fecha_alta_idse'],
        $fin['Folio_pre_baja_idse'],
        $fin['Fecha_pre_baja'],
        $fin['Folio_idse_baja'],
        $fin['Fecha_baja_idse']
    );
    if (!$stmtReingreso->execute()) {
        $stmtReingreso->close();
        throw new Exception('No se pudo insertar el reingreso');
    }
    $stmtReingreso->close();

    $update = $conn->prepare('UPDATE Plantilla SET `FECHA DE INGRESO` = NULL, `Fecha Baja` = NULL, `ComentarioBaja` = NULL, estatusContaAlta = "Pendiente", estatusContaBaja = "Pendiente" WHERE CURP = ?');
    if (!$update) {
        throw new Exception('No se pudo preparar la actualizacion de Plantilla');
    }
    $update->bind_param('s', $curp);
    if (!$update->execute()) {
        $update->close();
        throw new Exception('No se pudo actualizar Plantilla');
    }
    $update->close();

    $update_fin = $conn->prepare('UPDATE Plantilla_datos_financieros SET Folio_pre_alta_idse = NULL, Fecha_pre_alta = NULL, Folio_idse = NULL, Fecha_alta_idse = NULL, Folio_pre_baja_idse = NULL, Fecha_pre_baja = NULL, Folio_idse_baja = NULL, Fecha_baja_idse = NULL WHERE CURP = ?');
    if (!$update_fin) {
        throw new Exception('No se pudo preparar la actualizacion financiera');
    }
    $update_fin->bind_param('s', $curp);
    if (!$update_fin->execute()) {
        $update_fin->close();
        throw new Exception('No se pudo actualizar la informacion financiera');
    }
    $update_fin->close();

    $comentario = 'Reingreso registrado';
    $stmtSeg = $conn->prepare('INSERT INTO seguimiento_estatus (aspirante_id, estatus, usuario, comentario) VALUES (?, ?, ?, ?)');
    if (!$stmtSeg) {
        throw new Exception('No se pudo preparar el seguimiento');
    }
    $stmtSeg->bind_param('isss', $aspiranteId, $estatus_actual, $usuario, $comentario);
    if (!$stmtSeg->execute()) {
        $stmtSeg->close();
        throw new Exception('No se pudo insertar el seguimiento');
    }
    $stmtSeg->close();

    $conn->commit();
    echo json_encode(['success' => true]);
} catch (Exception $e) {
    $conn->rollback();
    http_response_code(500);
    echo json_encode(['error' => $e->getMessage()]);
}

$conn->close();
