<?php
session_start();
if(!isset($_SESSION['admin'])){
    header("Location: login.php");
    exit;
}

if($_SERVER['REQUEST_METHOD'] !== 'POST'){
    header("Location: agregar_inspector.php");
    exit;
}

include("conexion.php");

// Validar CSRF
if(!validar_csrf($_POST['csrf_token'] ?? '')){
    $_SESSION['mensaje'] = ['tipo' => 'error', 'texto' => 'Token de seguridad inválido. Intente de nuevo.'];
    header("Location: agregar_inspector.php");
    exit;
}

// Sanitizar entradas
$nombre = sanitizar($_POST['nombre'] ?? '');
$puesto = sanitizar($_POST['puesto'] ?? '');
$area_id = intval($_POST['area_id'] ?? 0);
$numero_trabajador = sanitizar($_POST['numero_trabajador'] ?? '');
$numero_credencial = sanitizar($_POST['numero_credencial'] ?? '');
$telefono = sanitizar($_POST['telefono'] ?? '');
$fecha_inicio = $_POST['fecha_inicio'] ?? null;
$fecha_fin = $_POST['fecha_fin'] ?? null;
$estatus = in_array($_POST['estatus'] ?? '', ['Activo', 'Inactivo']) ? $_POST['estatus'] : 'Activo';
$tipo_inspeccion = sanitizar($_POST['tipo_inspeccion'] ?? '');
$fundamento_juridico = sanitizar($_POST['fundamento_juridico'] ?? '');

// Validar campos requeridos
if(empty($nombre) || empty($puesto) || $area_id <= 0){
    $_SESSION['mensaje'] = ['tipo' => 'error', 'texto' => 'Complete todos los campos obligatorios.'];
    header("Location: agregar_inspector.php");
    exit;
}

// Manejar fechas vacías
$fecha_inicio = !empty($fecha_inicio) ? $fecha_inicio : null;
$fecha_fin = !empty($fecha_fin) ? $fecha_fin : null;

// Validar foto
if(!isset($_FILES['foto']) || $_FILES['foto']['error'] !== UPLOAD_ERR_OK){
    $_SESSION['mensaje'] = ['tipo' => 'error', 'texto' => 'Debe seleccionar una fotografía.'];
    header("Location: agregar_inspector.php");
    exit;
}

$ext = strtolower(pathinfo($_FILES['foto']['name'], PATHINFO_EXTENSION));

if(!in_array($ext, EXTENSIONES_PERMITIDAS)){
    $_SESSION['mensaje'] = ['tipo' => 'error', 'texto' => 'Formato de imagen no permitido. Use JPG, JPEG, PNG o WEBP.'];
    header("Location: agregar_inspector.php");
    exit;
}

if($_FILES['foto']['size'] > TAMANO_MAX_FOTO){
    $_SESSION['mensaje'] = ['tipo' => 'error', 'texto' => 'La imagen excede el tamaño máximo de 5 MB.'];
    header("Location: agregar_inspector.php");
    exit;
}

// Verificar que realmente sea una imagen
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $_FILES['foto']['tmp_name']);
finfo_close($finfo);

if(!in_array($mime, ['image/jpeg', 'image/png', 'image/webp'])){
    $_SESSION['mensaje'] = ['tipo' => 'error', 'texto' => 'El archivo no es una imagen válida.'];
    header("Location: agregar_inspector.php");
    exit;
}

$foto = uniqid('inspector_', true) . '.' . $ext;
$ruta = "fotos/" . $foto;

if(!move_uploaded_file($_FILES['foto']['tmp_name'], $ruta)){
    $_SESSION['mensaje'] = ['tipo' => 'error', 'texto' => 'Error al subir la fotografía.'];
    header("Location: agregar_inspector.php");
    exit;
}

$stmt = $conexion->prepare("INSERT INTO inspectores (nombre, puesto, numero_trabajador, foto, numero_credencial, telefono, fecha_inicio, fecha_fin, estatus, tipo_inspeccion, fundamento_juridico, area_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param("sssssssssssi", $nombre, $puesto, $numero_trabajador, $foto, $numero_credencial, $telefono, $fecha_inicio, $fecha_fin, $estatus, $tipo_inspeccion, $fundamento_juridico, $area_id);

if($stmt->execute()){
    // Regenerar CSRF después de acción exitosa
    unset($_SESSION['csrf_token']);
    $_SESSION['mensaje'] = ['tipo' => 'exito', 'texto' => 'Inspector registrado correctamente.'];
} else {
    $_SESSION['mensaje'] = ['tipo' => 'error', 'texto' => 'Error al guardar el inspector.'];
}

$stmt->close();
header("Location: agregar_inspector.php");
exit;
?>