<?php
require_once "../../functions.php";
$pag = basename($_SERVER['PHP_SELF']);
if (comprobar_override(str_replace($_SERVER['DOCUMENT_ROOT'], '', __FILE__))) exit;
comprobar_postget('post', ['campo', 'valor'], $pag, false, '');
if (session_status() !== PHP_SESSION_ACTIVE) session_start();
gen_plantilla(false, $pag, false, false, '', false, false);

$campo = filter_input(INPUT_POST, 'campo', FILTER_SANITIZE_SPECIAL_CHARS);
$valor_raw = isset($_POST['valor']) ? trim($_POST['valor']) : '';
$valor = filter_input(INPUT_POST, 'valor', FILTER_SANITIZE_SPECIAL_CHARS);
$id_empleado = !empty($_SESSION['id_empleado']) ? $_SESSION['id_empleado'] : null;
$id_usuario = $_SESSION['id_usuario'];

switch ($campo) {
    case 'email':
        if (!$id_empleado) {
            crear_notificacion('error', 'Tu cuenta no tiene un empleado asociado');
            exit;
        }
        if (!empty($valor) && !filter_var($valor, FILTER_VALIDATE_EMAIL)) {
            crear_notificacion('error', 'El correo electrónico no es válido');
            exit;
        }
        if (consulta('UPDATE empleados SET email=? WHERE id=?', [$valor, $id_empleado], false)) {
            crear_notificacion('correcto', 'Correo electrónico actualizado');
            crear_log('info', 'Perfil actualizado', $pag, "El usuario ID $id_usuario ha actualizado su correo electrónico.");
        } else {
            crear_notificacion('error', 'Error al actualizar el correo electrónico');
        }
        break;

    case 'telefono':
        if (!$id_empleado) {
            crear_notificacion('error', 'Tu cuenta no tiene un empleado asociado');
            exit;
        }
        if (consulta('UPDATE empleados SET telefono=? WHERE id=?', [$valor, $id_empleado], false)) {
            crear_notificacion('correcto', 'Teléfono actualizado');
            crear_log('info', 'Perfil actualizado', $pag, "El usuario ID $id_usuario ha actualizado su teléfono.");
        } else {
            crear_notificacion('error', 'Error al actualizar el teléfono');
        }
        break;

    case 'contrasena':
        // Validar: mínimo 6 caracteres, al menos una letra y un número
        if (strlen($valor) < 6) {
            crear_notificacion('error', 'La contraseña debe tener al menos 6 caracteres');
            exit;
        }
        if (!preg_match('/[a-zA-Z]/', $valor) || !preg_match('/\d/', $valor)) {
            crear_notificacion('error', 'La contraseña debe contener al menos una letra y un número');
            exit;
        }
        $hash = md5($valor);
        // Actualizar por id de usuario (funciona para admin, supervisor y empleados)
        if (consulta('UPDATE usuarios SET contra=? WHERE id=?', [$hash, $id_usuario], false)) {
            crear_notificacion('correcto', 'Contraseña actualizada');
            crear_log('info', 'Contraseña actualizada', $pag, "El usuario ID $id_usuario ha cambiado su contraseña.");
        } else {
            crear_notificacion('error', 'Error al actualizar la contraseña');
        }
        break;

    default:
        crear_notificacion('error', 'Campo no válido');
        break;
}
