<?php
// /controller/controller_login.php
declare(strict_types=1);
session_start();

if (($_POST['action'] ?? '') !== 'login') {
  http_response_code(400);
  echo 'Bad request';
  exit;
}

require_once '../services/pdo_connection.php';

$ident = trim($_POST['ident'] ?? $_POST['nombre_completo'] ?? ''); // admite ambos nombres
$pass  = $_POST['contrasena'] ?? '';

if ($ident === '' || $pass === '') {
  $_SESSION['login_error'] = 'Completa usuario y contraseña.';
  $_SESSION['form_data']['nombre_completo'] = $ident;
  header('Location: ../views/login.php');
  exit;
}

// Sólo dígitos del identificador (para comparar teléfono normalizado)
$digits = preg_replace('/\D+/', '', $ident) ?? '';

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

  // OJO: activo=1 **y** (cualquiera de las 3 coincidencias)
  $sql = "
    SELECT id_usuario, nombre_completo, correo, telefono, hash_contrasena, activo
    FROM usuario
    WHERE activo = 1
      AND (
        LOWER(TRIM(nombre_completo)) = LOWER(TRIM(:ident))
        OR LOWER(TRIM(correo))       = LOWER(TRIM(:ident))
        OR REPLACE(REPLACE(REPLACE(REPLACE(telefono,'-',''),' ',''),'(',')'),')','') = :digits
      )
    LIMIT 1
  ";

  $st = $db->prepare($sql);
  $st->execute([
    ':ident'  => $ident,
    ':digits' => $digits,
  ]);

  $row = $st->fetch(PDO::FETCH_ASSOC);

  if (!$row || !password_verify($pass, $row['hash_contrasena'])) {
    $_SESSION['login_error'] = 'Usuario/contraseña inválidos o cuenta inactiva.';
    $_SESSION['form_data']['nombre_completo'] = $ident;
    header('Location: ../views/login.php');
    exit;
  }

  // Login OK
  $_SESSION['user_id']   = (int)$row['id_usuario'];
  $_SESSION['user_name'] = $row['nombre_completo'];
  $_SESSION['is_admin']  = ((int)$row['id_usuario'] === 1);

  $to = $_SESSION['return_to'] ?? '../dashboard.php';
  unset($_SESSION['return_to'], $_SESSION['login_error'], $_SESSION['form_data']);
  header("Location: $to");
  exit;

} catch (Throwable $e) {
  // error_log($e->getMessage());
  $_SESSION['login_error'] = 'Error interno. Intenta de nuevo.';
  $_SESSION['form_data']['nombre_completo'] = $ident;
  header('Location: ../views/login.php');
  exit;
}
