<?php
// dashboard.php
declare(strict_types=1);

require_once __DIR__ . '/includes/auth.php';
require_once __DIR__ . '/includes/helpers.php';

require_scope();

$pdo = pdo();
$u  = current_user();
$sc = scope();

$companyId  = (int)($sc['company_id'] ?? 0);
$locationId = (int)($sc['location_id'] ?? 0);

$st = $pdo->prepare("SELECT name FROM companies WHERE id=?");
$st->execute([$companyId]);
$companyName = (string)($st->fetchColumn() ?: '');

$st = $pdo->prepare("SELECT name, code FROM locations WHERE id=? AND company_id=? LIMIT 1");
$st->execute([$locationId, $companyId]);
$locRow = $st->fetch(PDO::FETCH_ASSOC) ?: [];
$locationName = (string)($locRow['name'] ?? '');
$locationCode = (string)($locRow['code'] ?? '');

/* ============================================================
   DASHBOARD MULTIPLANTA MES
   ------------------------------------------------------------
   Producción se enruta por tipo de planta.
   Las demás secciones son comunes y deben filtrar por scope:
   company_id + location_id.
============================================================ */
function breport_norm_text(string $value): string {
  $value = trim($value);
  $map = [
    'Á'=>'A','É'=>'E','Í'=>'I','Ó'=>'O','Ú'=>'U','Ü'=>'U','Ñ'=>'N',
    'á'=>'A','é'=>'E','í'=>'I','ó'=>'O','ú'=>'U','ü'=>'U','ñ'=>'N',
  ];
  $value = strtr($value, $map);
  return mb_strtoupper($value, 'UTF-8');
}

function dashboard_plant_key(string $companyName, string $locationName, string $locationCode = ''): string {
  $txt = breport_norm_text($companyName . ' ' . $locationName . ' ' . $locationCode);

  if (str_contains($txt, 'BOTELLA')) {
    return 'botella';
  }

  if (str_contains($txt, 'GARRAFON') || str_contains($txt, 'GARAFON')) {
    return 'garrafon';
  }

  if (str_contains($txt, 'HIELO') && str_contains($txt, 'BOLSA')) {
    return 'hielo_bolsa';
  }

  if (str_contains($txt, 'HIELO') && str_contains($txt, 'BARRA')) {
    return 'hielo_barra';
  }

  return 'general';
}

function production_module_for_plant(string $plantKey): array {
  return match ($plantKey) {
    'hielo_barra' => [
      'enabled' => true,
      'title' => 'Producción Barras',
      'desc' => 'Reportaje de barra 150 kg',
      'href' => 'produccion.php',
      'icon' => 'bi-snow2',
    ],
    'botella' => [
      'enabled' => true,
      'title' => 'Producción Botella',
      'desc' => 'Reportaje operativo de botella',
      'href' => 'Produccion_botella.php',
      'icon' => 'bi-droplet-half',
    ],
    'hielo_bolsa' => [
      'enabled' => true,
      'title' => 'Producción Hielo Bolsa',
      'desc' => 'Reportaje operativo de bolsa',
      'href' => 'Produccion_HB.php',
      'icon' => 'bi-bag-check',
    ],
    'garrafon' => [
      'enabled' => true,
      'title' => 'Producción Garrafón',
      'desc' => 'Reportaje operativo de garrafón',
      'href' => 'Produccion_GR.php',
      'icon' => 'bi-water',
    ],
    default => [
      'enabled' => false,
      'title' => 'Producción',
      'desc' => 'Módulo no asignado para esta planta',
      'href' => '#',
      'icon' => 'bi-gear',
    ],
  };
}

$plantKey = dashboard_plant_key($companyName, $locationName, $locationCode);
$productionModule = production_module_for_plant($plantKey);
$isHieloBarra = ($plantKey === 'hielo_barra');

$hrefProduccion      = (string)$productionModule['href'];
$hrefCalidad         = 'calidad.php';

/*
 * Enrutamiento por empresa/planta.
 * ------------------------------------------------------------
 * Hielo Barra conserva sus archivos funcionales actuales, porque tiene
 * reglas especiales de barra, cubicado, CF1/CF2/CF3 y VentasHielo.
 *
 * Botella usa módulos propios para no heredar la personalización de Hielo Barra:
 * - almacen_botella.php
 * - ventas_botella.php
 *
 * Las demás plantas se mantienen en el flujo general hasta que tengan
 * módulos específicos.
 */
$hrefAlmacen = match ($plantKey) {
  'botella' => 'almacen_botella.php',
  default   => 'almacen_salidas.php',
};

$hrefVentas = match ($plantKey) {
  'botella' => 'ventas_botella.php',
  default   => 'ventas_pedidos.php',
};

$hrefMontacargas = 'montacargas_botella.php';
$hrefReparto      = 'reparto_botella.php';

$hrefTransferencias  = 'transferencias.php';
$hrefReportes        = 'reportes.php';
$hrefAdmin           = 'admin_config.php';
$hrefCubicado        = 'produccion_cubicado.php';
$logoPath            = 'assets/logo.png';

/* ===== Permisos por módulo =====
 * Regla especial:
 * - Rol ventas: solo módulo Ventas.
 * - Rol reparto: solo módulo Repartidor Botella.
 * - Rol montacargas: solo módulo Montacargas Botella.
 * - Rol supervisor: módulos operativos + reportes, sin Admin.
 * - Admin conserva todo.
 */
function user_has_any_role_breport(array $codes): bool {
  foreach ($codes as $code) {
    if (has_role((string)$code)) return true;
  }
  return false;
}

function can_access_module_breport(string $module): bool {
  $module = strtolower(trim($module));

  if (has_role('admin')) {
    return true;
  }

  if (has_role('supervisor')) {
    return in_array($module, [
      'produccion',
      'produccion_cubicado',
      'calidad',
      'almacen',
      'transferencias',
      'ventas',
      'reparto',
      'reportes'
    ], true);
  }

  if (has_role('ventas') || has_role('sales')) {
    return $module === 'ventas';
  }

  if (has_role('reparto') || has_role('repartidor')) {
    return $module === 'reparto';
  }

  if (has_role('montacargas') || has_role('forklift')) {
    return $module === 'montacargas';
  }

  if (has_role('plant_admin')) {
    return in_array($module, [
      'produccion',
      'produccion_cubicado',
      'calidad',
      'almacen',
      'transferencias',
      'ventas',
      'reparto',
      'reportes'
    ], true);
  }

  if (has_role('corp')) {
    return in_array($module, ['ventas', 'reportes'], true);
  }

  return match ($module) {
    'produccion' => user_has_any_role_breport(['production']),
    'produccion_cubicado' => user_has_any_role_breport(['production']),
    'calidad' => user_has_any_role_breport(['quality', 'calidad']),
    'almacen' => user_has_any_role_breport(['warehouse', 'almacen']),
    'transferencias' => user_has_any_role_breport(['warehouse', 'almacen']),
    'ventas' => user_has_any_role_breport(['ventas', 'sales']),
    'reparto' => user_has_any_role_breport(['reparto', 'repartidor', 'warehouse', 'almacen']),
    'montacargas' => user_has_any_role_breport(['montacargas', 'forklift']),
    'reportes' => false,
    'admin' => false,
    default => false,
  };
}

$canProduccion      = can_access_module_breport('produccion') && (bool)$productionModule['enabled'];
$canCubicado        = can_access_module_breport('produccion_cubicado') && $isHieloBarra;
$canCalidad         = can_access_module_breport('calidad');
$canAlmacen         = can_access_module_breport('almacen');
$canTransferencias  = can_access_module_breport('transferencias');
$canVentas          = can_access_module_breport('ventas');
$canMontacargas    = ($plantKey === 'botella') && can_access_module_breport('montacargas');
$canReparto        = ($plantKey === 'botella') && can_access_module_breport('reparto');
$canReportes        = can_access_module_breport('reportes');
$canAdmin           = can_access_module_breport('admin');

/* ===== Modo de calidad ===== */
$calidadMode = $canCalidad ? 'Captura' : '';
$plantBadge = match ($plantKey) {
  'hielo_barra' => 'Hielo Barra',
  'botella' => 'Botella',
  'hielo_bolsa' => 'Hielo Bolsa',
  'garrafon' => 'Garrafón',
  default => 'MES General',
};

$almacenCardDesc = match ($plantKey) {
  'botella' => 'Inventario y embarques Botella',
  default   => 'Existencia disponible por planta',
};

$ventasCardDesc = match ($plantKey) {
  'botella' => 'Pedidos logísticos Botella',
  default   => 'Pedidos y autorización por planta',
};

$repartoCardDesc = 'Entregas y salidas desde ruta móvil';
?>
<!doctype html>
<html lang="es">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>BReport · Dashboard</title>

  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
  <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet">

  <style>
    body{background:#f6f7fb;}
    .hero{
      background: linear-gradient(135deg,#061b2b,#0b2f55);
      color:#fff;
      border-radius:22px;
      padding:18px 18px;
    }

    /* Cards de acceso estilo Planta: azul + texto blanco */
    .module{
      border-radius:20px;
      border:1px solid rgba(255,255,255,.18);
      transition:transform .12s ease, box-shadow .12s ease, filter .12s ease;
      cursor:pointer;
      text-decoration:none;
      color:#fff;
      overflow:hidden;
      background:
        radial-gradient(circle at top right, rgba(255,255,255,.18), transparent 34%),
        linear-gradient(135deg,#0b2f55 0%,#0f4c81 48%,#1d75d8 100%);
      box-shadow:0 16px 34px rgba(15,76,129,.22);
      min-height:122px;
      position:relative;
    }
    .module::after{
      content:'';
      position:absolute;
      right:-26px;
      bottom:-26px;
      width:94px;
      height:94px;
      border-radius:999px;
      background:rgba(255,255,255,.10);
      pointer-events:none;
    }
    .module:hover{
      transform:translateY(-3px);
      box-shadow:0 20px 42px rgba(15,76,129,.30);
      filter:brightness(1.03);
      color:#fff;
    }
    .module:active{ transform:translateY(0px); }
    .module .card-body{ position:relative; z-index:1; }
    .module .fw-bold{ color:#fff; }
    .module .text-muted,
    .module .small{ color:rgba(255,255,255,.78)!important; }

    .m-ico{
      width:50px;
      height:50px;
      border-radius:16px;
      display:flex;
      align-items:center;
      justify-content:center;
      background:rgba(255,255,255,.16);
      color:#fff;
      font-size:24px;
      flex:0 0 auto;
      border:1px solid rgba(255,255,255,.22);
      box-shadow:inset 0 1px 0 rgba(255,255,255,.18);
    }
    .m-ico.green,
    .m-ico.orange,
    .m-ico.red,
    .m-ico.gray,
    .m-ico.purple,
    .m-ico.teal,
    .m-ico.indigo{
      background:rgba(255,255,255,.16);
      color:#fff;
      border-color:rgba(255,255,255,.22);
    }

    .small-muted{color:rgba(255,255,255,.72);}
    .badge-scope{
      background:rgba(255,255,255,.14);
      border:1px solid rgba(255,255,255,.18);
    }
    .chip{
      border:1px solid rgba(255,255,255,.28);
      background:rgba(255,255,255,.16);
      color:#fff!important;
    }

    .m-logo{
      width:48px;
      height:48px;
      border-radius:14px;
      display:flex;
      align-items:center;
      justify-content:center;
      background:rgba(13,110,253,.10);
      border:1px solid rgba(13,110,253,.14);
      padding:7px;
      flex:0 0 auto;
    }
    .m-logo img{
      width:100%;
      height:100%;
      object-fit:contain;
      border-radius:10px;
    }
    .scope-note{
      border-radius:18px;
      background:#fff;
      border:1px solid rgba(0,0,0,.06);
    }
  </style>
</head>

<body>
<nav class="navbar bg-white border-bottom">
  <div class="container-fluid">
    <span class="navbar-brand fw-bold">BReport</span>
    <div class="ms-auto d-flex gap-2 align-items-center flex-wrap justify-content-end">
      <span class="text-muted small"><?= h($u['full_name'] ?? '') ?></span>

      <a class="btn btn-outline-secondary btn-sm" href="select_scope.php">
        <i class="bi bi-geo-alt"></i> Cambiar de empresa
      </a>

      <a class="btn btn-outline-danger btn-sm" href="logout.php" title="Salir">
        <i class="bi bi-box-arrow-right"></i>
      </a>
    </div>
  </div>
</nav>

<div class="container py-4">
  <div class="hero shadow-sm mb-3">
    <div class="d-flex flex-wrap gap-2 align-items-center">
      <div>
        <div class="fw-bold fs-4">Panel principal</div>
        <div class="small-muted">Accesos rápidos a módulos por empresa, planta y localidad</div>
      </div>

      <div class="ms-auto d-flex gap-2 align-items-center flex-wrap justify-content-end">
        <span class="badge badge-scope rounded-pill px-3 py-2">
          <i class="bi bi-diagram-3"></i> <?= h($plantBadge) ?>
        </span>
        <span class="badge badge-scope rounded-pill px-3 py-2">
          <i class="bi bi-building"></i> <?= h($companyName) ?>
        </span>
        <span class="badge badge-scope rounded-pill px-3 py-2">
          <i class="bi bi-pin-map"></i> <?= h($locationName) ?><?= $locationCode !== '' ? ' · ' . h($locationCode) : '' ?>
        </span>
      </div>
    </div>
  </div>

  <div class="scope-note p-3 mb-3 text-muted small">
    <i class="bi bi-info-circle"></i>
    Producción se muestra según la planta seleccionada. Calidad, Almacén, Ventas, Transferencias y Reportes permanecen disponibles para todas las plantas y deben consultar con el alcance activo: empresa <?= h((string)$companyId) ?> · localidad <?= h((string)$locationId) ?>.
  </div>

  <div class="row g-3">

    <?php if ($canProduccion): ?>
      <div class="col-12 col-sm-6 col-lg-3">
        <a class="card module h-100" href="<?= h($hrefProduccion) ?>">
          <div class="card-body d-flex gap-3">
            <div class="m-ico indigo"><i class="bi <?= h((string)$productionModule['icon']) ?>"></i></div>
            <div class="flex-grow-1">
              <div class="fw-bold"><?= h((string)$productionModule['title']) ?></div>
              <div class="text-muted small"><?= h((string)$productionModule['desc']) ?></div>
            </div>
          </div>
        </a>
      </div>
    <?php endif; ?>

    <?php if ($canCubicado): ?>
      <div class="col-12 col-sm-6 col-lg-3">
        <a class="card module h-100" href="<?= h($hrefCubicado) ?>">
          <div class="card-body d-flex gap-3">
            <div class="m-ico teal"><i class="bi bi-boxes"></i></div>
            <div class="flex-grow-1">
              <div class="fw-bold">Producción Cubicado</div>
              <div class="text-muted small">Convierte barra a artículos</div>
            </div>
          </div>
        </a>
      </div>
    <?php endif; ?>

    <?php if ($canCalidad): ?>
      <div class="col-12 col-sm-6 col-lg-3">
        <a class="card module h-100" href="<?= h($hrefCalidad) ?>">
          <div class="card-body d-flex gap-3 align-items-center">
            <div class="m-ico green"><i class="bi bi-shield-check"></i></div>
            <div class="flex-grow-1">
              <div class="fw-bold d-flex align-items-center gap-2">
                Calidad
                <?php if ($calidadMode !== ''): ?>
                  <span class="badge rounded-pill chip text-muted small"><?= h($calidadMode) ?></span>
                <?php endif; ?>
              </div>
              <div class="text-muted small">Reportaje de calidad por turno</div>
            </div>
          </div>
        </a>
      </div>
    <?php endif; ?>

    <?php if ($canAlmacen): ?>
      <div class="col-12 col-sm-6 col-lg-3">
        <a class="card module h-100" href="<?= h($hrefAlmacen) ?>">
          <div class="card-body d-flex gap-3">
            <div class="m-ico orange"><i class="bi bi-box-seam"></i></div>
            <div class="flex-grow-1">
              <div class="fw-bold">Almacén</div>
              <div class="text-muted small"><?= h($almacenCardDesc) ?></div>
            </div>
          </div>
        </a>
      </div>
    <?php endif; ?>

    <?php if ($canTransferencias): ?>
      <div class="col-12 col-sm-6 col-lg-3">
        <a class="card module h-100" href="<?= h($hrefTransferencias) ?>">
          <div class="card-body d-flex gap-3">
            <div class="m-ico purple"><i class="bi bi-arrow-left-right"></i></div>
            <div class="flex-grow-1">
              <div class="fw-bold">Transferencias</div>
              <div class="text-muted small">Envío / Recepción por localidad</div>
            </div>
          </div>
        </a>
      </div>
    <?php endif; ?>

    <?php if ($canVentas): ?>
      <div class="col-12 col-sm-6 col-lg-3">
        <a class="card module h-100" href="<?= h($hrefVentas) ?>">
          <div class="card-body d-flex gap-3">
            <div class="m-ico"><i class="bi bi-cart-check"></i></div>
            <div class="flex-grow-1">
              <div class="fw-bold">Ventas</div>
              <div class="text-muted small"><?= h($ventasCardDesc) ?></div>
            </div>
          </div>
        </a>
      </div>
    <?php endif; ?>



    <?php if ($canReparto): ?>
      <div class="col-12 col-sm-6 col-lg-3">
        <a class="card module h-100" href="<?= h($hrefReparto) ?>">
          <div class="card-body d-flex gap-3">
            <div class="m-ico teal"><i class="bi bi-person-badge"></i></div>
            <div class="flex-grow-1">
              <div class="fw-bold">Repartidor</div>
              <div class="text-muted small"><?= h($repartoCardDesc) ?></div>
            </div>
          </div>
        </a>
      </div>
    <?php endif; ?>


    <?php if ($canMontacargas): ?>
      <div class="col-12 col-sm-6 col-lg-3">
        <a class="card module h-100" href="<?= h($hrefMontacargas) ?>">
          <div class="card-body d-flex gap-3">
            <div class="m-ico teal"><i class="bi bi-truck-front"></i></div>
            <div class="flex-grow-1">
              <div class="fw-bold">Montacargas</div>
              <div class="text-muted small">Órdenes de carga Botella</div>
            </div>
          </div>
        </a>
      </div>
    <?php endif; ?>

    <?php if ($canReportes): ?>
      <div class="col-12 col-sm-6 col-lg-3">
        <a class="card module h-100" href="<?= h($hrefReportes) ?>">
          <div class="card-body d-flex gap-3">
            <div class="m-ico gray"><i class="bi bi-graph-up-arrow"></i></div>
            <div class="flex-grow-1">
              <div class="fw-bold">Reportes</div>
              <div class="text-muted small">KPIs corporativo</div>
            </div>
          </div>
        </a>
      </div>
    <?php endif; ?>

    <?php if ($canAdmin): ?>
      <div class="col-12 col-sm-6 col-lg-3">
        <a class="card module h-100" href="<?= h($hrefAdmin) ?>">
          <div class="card-body d-flex gap-3">
            <div class="m-ico red"><i class="bi bi-gear"></i></div>
            <div class="flex-grow-1">
              <div class="fw-bold">Admin</div>
              <div class="text-muted small">Catálogos y accesos</div>
            </div>
          </div>
        </a>
      </div>
    <?php endif; ?>

  </div>

  <div class="text-muted small mt-3">
    Tip: En celular los accesos quedan en 2 columnas para que sea fácil tocar.
  </div>
</div>
</body>
</html>
