<?php
// php/conexion.php
// Conexión dinámica para LOCALHOST (XAMPP/Laragon) y HOSTING cPanel.
declare(strict_types=1);

// En producción no se muestran errores al usuario, se registran en el log del hosting.
ini_set('display_errors', '0');
ini_set('log_errors', '1');
error_reporting(E_ALL);

// Compatibilidad con PHP < 8.
if (!function_exists('str_contains')) {
  function str_contains($haystack, $needle) {
    return $needle !== '' && strpos((string)$haystack, (string)$needle) !== false;
  }
}

/**
 * Indica si el endpoint espera una respuesta JSON.
 */
function fp_wants_json(): bool {
  $accept = $_SERVER['HTTP_ACCEPT'] ?? '';
  $xhr    = $_SERVER['HTTP_X_REQUESTED_WITH'] ?? '';

  return (stripos($accept, 'application/json') !== false)
      || (strtolower($xhr) === 'xmlhttprequest');
}

/**
 * Lee una variable de entorno si existe; si no, usa un valor por defecto.
 * Esto permite que en hosting puedas configurar credenciales sin tocar código,
 * pero también funciona con los datos escritos abajo.
 */
function fp_env(string $key, string $default = ''): string {
  $value = getenv($key);
  if ($value === false || $value === '') {
    $value = $_ENV[$key] ?? $_SERVER[$key] ?? $default;
  }
  return (string)$value;
}

/**
 * Detecta si estamos trabajando en ambiente local.
 */
$serverName = strtolower($_SERVER['SERVER_NAME'] ?? '');
$httpHost   = strtolower($_SERVER['HTTP_HOST'] ?? '');
$serverAddr = $_SERVER['SERVER_ADDR'] ?? '';
$remoteAddr = $_SERVER['REMOTE_ADDR'] ?? '';

$esLocal =
  in_array($serverName, ['localhost', '127.0.0.1', '::1'], true) ||
  in_array($httpHost,   ['localhost', '127.0.0.1', '::1'], true) ||
  str_starts_with($httpHost, 'localhost:') ||
  str_contains($serverName, '.test') ||
  str_contains($httpHost, '.test') ||
  str_contains($serverName, '.local') ||
  str_contains($httpHost, '.local') ||
  in_array($serverAddr, ['127.0.0.1', '::1'], true) ||
  in_array($remoteAddr, ['127.0.0.1', '::1'], true);

// =====================================================
// CONFIGURACIÓN LOCAL - XAMPP / Laragon
// URL esperada: http://localhost/familia_panquehue/
// Base local esperada: familia_panquehue
// =====================================================
$CFG_LOCAL = [
  'host'   => '127.0.0.1',
  'port'   => 3306,
  'dbname' => 'familia_panquehue',
  'user'   => 'root',
  'pass'   => '',
];

// =====================================================
// CONFIGURACIÓN HOSTING - cPanel
// Base creada en hosting: cesfamme_familia_panquehue
// IMPORTANTE:
// 1) Crea o usa un usuario MySQL en cPanel.
// 2) Asigna ese usuario a la BD cesfamme_familia_panquehue con TODOS los privilegios.
// 3) Cambia FP_DB_USER y FP_DB_PASS por tus datos reales, o configura variables de entorno.
// =====================================================
$CFG_HOSTING = [
  'host'   => fp_env('FP_DB_HOST', 'localhost'),
  'port'   => (int)fp_env('FP_DB_PORT', '3306'),
  'dbname' => fp_env('FP_DB_NAME', 'cesfamme_familia_panquehue'),
  'user'   => fp_env('FP_DB_USER', 'cesfamme_root_panquehue'),
  'pass'   => fp_env('FP_DB_PASS', '_Fito3486$'),
];

$cfg = $esLocal ? $CFG_LOCAL : $CFG_HOSTING;

$dsn = sprintf(
  'mysql:host=%s;port=%d;dbname=%s;charset=utf8mb4',
  $cfg['host'],
  (int)$cfg['port'],
  $cfg['dbname']
);

$options = [
  PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
  PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
  PDO::ATTR_EMULATE_PREPARES   => true,
  PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci",
];

try {
  $pdo = new PDO($dsn, $cfg['user'], $cfg['pass'], $options);
} catch (Throwable $e) {
  error_log('DB CONNECT ERROR [' . ($esLocal ? 'LOCAL' : 'HOSTING') . '] ' .
            $cfg['host'] . ':' . $cfg['port'] . ' / ' . $cfg['dbname'] . ' -> ' . $e->getMessage());

  http_response_code(500);

  if (!headers_sent()) {
    header('Content-Type: ' . (fp_wants_json() ? 'application/json' : 'text/plain') . '; charset=utf-8');
    header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
  }

  $mensaje = $esLocal
    ? 'Error conexión BD LOCAL. Revisa que MySQL esté encendido y exista la base familia_panquehue.'
    : 'Error conexión BD HOSTING. Revisa usuario, clave y privilegios de la base cesfamme_familia_panquehue.';

  if (fp_wants_json()) {
    echo json_encode([
      'ok' => false,
      'message' => $mensaje,
    ], JSON_UNESCAPED_UNICODE);
  } else {
    echo $mensaje;
  }
  exit;
}
