<?php
// ============================================================
// ERP - ActSafe | Módulo de Unidades Fabris
// Com criação automática de Técnico e Gestor ao cadastrar
// Desenvolvido por Antônio da Luz
// ============================================================
require_once '../5_config/config.php';
$usuario = verificarAuth();
$db = getDB();
$perfil = $usuario['perfil'];
Auditoria::inicializar($db, $usuario['id'], $usuario['nome'], $usuario['perfil']);

// ============================================================
// PROCESSAR FORMULÁRIOS (POST) — padrão PRG
// ============================================================
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $acao_form = $_POST['acao_form'] ?? '';

    // --- SALVAR (criar ou editar) ---
    if ($acao_form === 'salvar' && temPermissao('criar', $perfil)) {
        $id      = (int)($_POST['id'] ?? 0);
        $codigo  = limpar($_POST['codigo'] ?? '');
        $nome    = limpar($_POST['nome'] ?? '');
        $cidade  = limpar($_POST['cidade'] ?? '');
        $estado  = limpar($_POST['estado'] ?? '');


        // Responsáveis
        $gestor_nome  = limpar($_POST['gestor_nome'] ?? '');
        $gestor_email = limpar($_POST['gestor_email'] ?? '');
        $tecnico_nome  = limpar($_POST['tecnico_nome'] ?? '');
        $tecnico_email = limpar($_POST['tecnico_email'] ?? '');

        if (!$codigo || !$nome) {
            header('Location: unidades.php?msg=error:Código+e+Nome+são+obrigatórios.'); exit;
        }

        try {
            $db->beginTransaction();

            // Função auxiliar: criar ou vincular usuário à unidade
            $criarOuVincular = function(string $nome_u, string $email_u, string $perfil_u, int $unidade_id) use ($db): ?int {
                if (!$nome_u || !$email_u) return null;
                // Verificar se já existe
                $stmt = $db->prepare("SELECT id FROM usuarios WHERE email = ? LIMIT 1");
                $stmt->execute([$email_u]);
                $existente = $stmt->fetch();
                if ($existente) {
                    $uid = $existente['id'];
                } else {
                    // Criar usuário com senha temporária
                    $senha_temp = 'Actsafe@' . rand(1000, 9999);
                    $hash = password_hash($senha_temp, PASSWORD_BCRYPT, ['cost' => BCRYPT_COST]);
                    $stmt = $db->prepare("INSERT INTO usuarios (nome, email, senha, perfil, senha_temporaria, ativo, criado_em) VALUES (?, ?, ?, ?, 1, 1, NOW())");
                    $stmt->execute([$nome_u, $email_u, $hash, $perfil_u]);
                    $uid = (int)$db->lastInsertId();
                }
                // Vincular à unidade (INSERT IGNORE evita duplicatas)
                $db->prepare("INSERT IGNORE INTO usuarios_unidades (usuario_id, unidade_id) VALUES (?, ?)")->execute([$uid, $unidade_id]);
                return $uid;
            };

            if ($id > 0 && temPermissao('editar', $perfil)) {
                // EDITAR
                $stmt_antes = $db->prepare("SELECT codigo, nome, cidade, estado FROM unidades WHERE id=?");
                $stmt_antes->execute([$id]); $dados_antes = $stmt_antes->fetch() ?: [];
                $db->prepare("UPDATE unidades SET codigo=?,nome=?,cidade=?,estado=? WHERE id=?")
                   ->execute([$codigo, $nome, $cidade, $estado, $id]);
                Auditoria::atualizar('unidades', $id, $dados_antes, ['codigo'=>$codigo,'nome'=>$nome,'cidade'=>$cidade,'estado'=>$estado], "Unidade atualizada: $nome");

                if ($gestor_email) {
                    $gid = $criarOuVincular($gestor_nome, $gestor_email, 'gestor_unidade', $id);
                    if ($gid) $db->prepare("UPDATE unidades SET gestor_id=?,gestor_nome=? WHERE id=?")->execute([$gid, $gestor_nome, $id]);
                }
                if ($tecnico_email) {
                    $tid = $criarOuVincular($tecnico_nome, $tecnico_email, 'tecnico', $id);
                    if ($tid) $db->prepare("UPDATE unidades SET tecnico_id=?,tecnico_nome=? WHERE id=?")->execute([$tid, $tecnico_nome, $id]);
                }
                $msg_redirect = 'success:Unidade+atualizada+com+sucesso!';
            } else {
                // CRIAR
                $db->prepare("INSERT INTO unidades (codigo,nome,cidade,estado,ativo,criado_em) VALUES (?,?,?,?,1,NOW())")
                   ->execute([$codigo, $nome, $cidade, $estado]);
                $nova_id = (int)$db->lastInsertId();

                $gid = $criarOuVincular($gestor_nome, $gestor_email, 'gestor_unidade', $nova_id);
                if ($gid) $db->prepare("UPDATE unidades SET gestor_id=?,gestor_nome=? WHERE id=?")->execute([$gid, $gestor_nome, $nova_id]);

                $tid = $criarOuVincular($tecnico_nome, $tecnico_email, 'tecnico', $nova_id);
                if ($tid) $db->prepare("UPDATE unidades SET tecnico_id=?,tecnico_nome=? WHERE id=?")->execute([$tid, $tecnico_nome, $nova_id]);

                $extras = [];
                if ($gid) $extras[] = 'Gestor vinculado';
                if ($tid) $extras[] = 'Técnico vinculado';
                Auditoria::criar('unidades', $nova_id, ['codigo'=>$codigo,'nome'=>$nome,'cidade'=>$cidade,'estado'=>$estado], "Unidade criada: $nome ($codigo)");
                $msg_redirect = 'success:Unidade+cadastrada!' . ($extras ? '+(' . implode(', ', $extras) . ')' : '');
            }

            $db->commit();
            header('Location: unidades.php?msg=' . $msg_redirect); exit;

        } catch (Exception $e) {
            $db->rollBack();
            header('Location: unidades.php?msg=error:Erro+ao+salvar:+' . urlencode($e->getMessage())); exit;
        }
    }

    // --- EXCLUIR ---
    if ($acao_form === 'excluir' && temPermissao('excluir', $perfil)) {
        $id = (int)($_POST['id'] ?? 0);
        if ($id > 0) {
            $stmt_del = $db->prepare("SELECT codigo, nome FROM unidades WHERE id=?");
            $stmt_del->execute([$id]); $reg_del = $stmt_del->fetch() ?: [];
            $db->prepare("DELETE FROM unidades WHERE id=?")->execute([$id]);
            Auditoria::deletar('unidades', $id, $reg_del, "Unidade excluída: " . ($reg_del['nome'] ?? 'ID '.$id));
        }
        header('Location: unidades.php?msg=success:Unidade+removida.'); exit;
    }
}

// Mensagem de redirect
$msg = $_GET['msg'] ?? '';

// ============================================================
// BUSCAR UNIDADES (com isolamento por perfil)
// ============================================================
$busca = sanitizar($_GET['busca'] ?? '');
try {
    if ($perfil === 'admin' || $perfil === 'diretor_geral') {
        // Vê todas as unidades
        if ($busca) {
            $stmt = $db->prepare("SELECT * FROM unidades WHERE (nome LIKE ? OR codigo LIKE ? OR cidade LIKE ?) ORDER BY nome");
            $stmt->execute(["%$busca%", "%$busca%", "%$busca%"]);
        } else {
            $stmt = $db->query("SELECT * FROM unidades ORDER BY nome");
        }
    } else {
        // Gestor e Técnico: apenas suas unidades vinculadas
        if ($busca) {
            $stmt = $db->prepare("SELECT u.* FROM unidades u INNER JOIN usuarios_unidades uu ON uu.unidade_id = u.id WHERE uu.usuario_id = ? AND (u.nome LIKE ? OR u.codigo LIKE ?) ORDER BY u.nome");
            $stmt->execute([$usuario['id'], "%$busca%", "%$busca%"]);
        } else {
            $stmt = $db->prepare("SELECT u.* FROM unidades u INNER JOIN usuarios_unidades uu ON uu.unidade_id = u.id WHERE uu.usuario_id = ? ORDER BY u.nome");
            $stmt->execute([$usuario['id']]);
        }
    }
    $unidades = $stmt->fetchAll();
} catch (Exception $e) {
    $unidades = [];
}

// Carregar dados para edição
$editando = null;
if (isset($_GET['editar'])) {
    $stmt = $db->prepare("SELECT * FROM unidades WHERE id=? LIMIT 1");
    $stmt->execute([(int)$_GET['editar']]);
    $editando = $stmt->fetch();
}

$estados = ['AC','AL','AP','AM','BA','CE','DF','ES','GO','MA','MT','MS','MG','PA','PB','PR','PE','PI','RJ','RN','RS','RO','RR','SC','SP','SE','TO'];
$pagina_titulo = 'Unidades Fabris';
require_once '../1_frontend/layout.php';
?>

<div class="space-y-5">

  <!-- CABEÇALHO -->
  <div class="flex items-center justify-between flex-wrap gap-3">
    <div>
      <h1 class="text-2xl font-bold text-actsafe-text flex items-center gap-2">
        <i data-lucide="building-2" class="w-6 h-6 text-actsafe-blue"></i> Unidades Fabris
      </h1>
      <p class="text-sm text-gray-500 mt-0.5">Gerencie as plantas industriais e seus responsáveis</p>
    </div>
    <?php if (temPermissao('criar', $perfil)): ?>
    <a href="unidades.php?novo=1" class="btn-primary">
      <i data-lucide="plus" class="w-4 h-4"></i> Nova Unidade
    </a>
    <?php endif; ?>
  </div>

  <!-- MENSAGEM -->
  <?php if ($msg): [$tipo,$texto] = explode(':', $msg, 2); ?>
  <div class="flex items-center gap-2 px-4 py-3 rounded-lg text-sm font-medium
    <?= $tipo==='success' ? 'bg-green-50 border border-green-200 text-green-700' : 'bg-red-50 border border-red-200 text-red-700' ?>">
    <i data-lucide="<?= $tipo==='success' ? 'check-circle' : 'alert-circle' ?>" class="w-4 h-4"></i>
    <?= sanitizar($texto) ?>
  </div>
  <?php endif; ?>

  <!-- FORMULÁRIO DE CADASTRO / EDIÇÃO -->
  <?php if (isset($_GET['novo']) || $editando): ?>
  <div class="card border-l-4 border-actsafe-blue">
    <h2 class="font-semibold text-actsafe-text mb-5 flex items-center gap-2">
      <i data-lucide="<?= $editando ? 'pencil' : 'plus-circle' ?>" class="w-4 h-4 text-actsafe-blue"></i>
      <?= $editando ? 'Editar Unidade' : 'Nova Unidade Fabril' ?>
    </h2>

    <form method="POST" action="unidades.php">
      <input type="hidden" name="acao_form" value="salvar">
      <input type="hidden" name="id" value="<?= $editando['id'] ?? 0 ?>">

      <!-- BLOCO 1: DADOS DA UNIDADE -->
      <div class="mb-5">
        <p class="text-xs font-bold text-actsafe-blue uppercase tracking-wide mb-3 flex items-center gap-1.5">
          <span class="w-5 h-5 bg-actsafe-blue text-white rounded text-xs flex items-center justify-center">1</span>
          Dados da Unidade
        </p>
        <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4">
          <div>
            <label class="form-label">Código *</label>
            <input type="text" name="codigo" class="form-input" placeholder="ex: UN-001" maxlength="20"
                   value="<?= sanitizar($editando['codigo'] ?? '') ?>" required>
          </div>
          <div class="sm:col-span-2">
            <label class="form-label">Nome da Unidade *</label>
            <input type="text" name="nome" class="form-input" placeholder="ex: Planta São Bernardo"
                   value="<?= sanitizar($editando['nome'] ?? '') ?>" required>
          </div>
          <div>
            <label class="form-label">Cidade</label>
            <input type="text" name="cidade" class="form-input" placeholder="ex: São Bernardo do Campo"
                   value="<?= sanitizar($editando['cidade'] ?? '') ?>">
          </div>
          <div>
            <label class="form-label">Estado (UF)</label>
            <select name="estado" class="form-input">
              <option value="">Selecione...</option>
              <?php foreach ($estados as $uf): ?>
              <option value="<?= $uf ?>" <?= ($editando['estado'] ?? '') === $uf ? 'selected' : '' ?>><?= $uf ?></option>
              <?php endforeach; ?>
            </select>
          </div>

        </div>
      </div>

      <!-- BLOCO 2: GESTOR DA UNIDADE -->
      <div class="mb-5 p-4 bg-blue-50 rounded-xl border border-blue-100">
        <p class="text-xs font-bold text-actsafe-blue uppercase tracking-wide mb-3 flex items-center gap-1.5">
          <span class="w-5 h-5 bg-actsafe-blue text-white rounded text-xs flex items-center justify-center">2</span>
          Gestor da Unidade
          <span class="text-xs font-normal text-blue-400 normal-case ml-1">— criado automaticamente se não existir</span>
        </p>
        <div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
          <div>
            <label class="form-label">Nome do Gestor</label>
            <input type="text" name="gestor_nome" class="form-input bg-white" placeholder="Nome completo"
                   value="<?= sanitizar($editando['gestor_nome'] ?? '') ?>">
          </div>
          <div>
            <label class="form-label">E-mail do Gestor</label>
            <input type="email" name="gestor_email" class="form-input bg-white" placeholder="gestor@empresa.com.br">
            <p class="text-xs text-blue-500 mt-1">Senha inicial: <strong>Actsafe@XXXX</strong></p>
          </div>
        </div>
      </div>

      <!-- BLOCO 3: TÉCNICO RESPONSÁVEL -->
      <div class="mb-5 p-4 bg-orange-50 rounded-xl border border-orange-100">
        <p class="text-xs font-bold text-orange-600 uppercase tracking-wide mb-3 flex items-center gap-1.5">
          <span class="w-5 h-5 bg-actsafe-orange text-white rounded text-xs flex items-center justify-center">3</span>
          Técnico Responsável
          <span class="text-xs font-normal text-orange-400 normal-case ml-1">— criado automaticamente se não existir</span>
        </p>
        <div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
          <div>
            <label class="form-label">Nome do Técnico</label>
            <input type="text" name="tecnico_nome" class="form-input bg-white" placeholder="Nome completo"
                   value="<?= sanitizar($editando['tecnico_nome'] ?? '') ?>">
          </div>
          <div>
            <label class="form-label">E-mail do Técnico</label>
            <input type="email" name="tecnico_email" class="form-input bg-white" placeholder="tecnico@empresa.com.br">
            <p class="text-xs text-orange-500 mt-1">Senha inicial: <strong>Actsafe@XXXX</strong></p>
          </div>
        </div>
      </div>

      <div class="flex gap-2 mt-4">
        <button type="submit" class="btn-primary">
          <i data-lucide="save" class="w-4 h-4"></i> <?= $editando ? 'Salvar Alterações' : 'Cadastrar Unidade' ?>
        </button>
        <a href="unidades.php" class="btn-outline">Cancelar</a>
      </div>
    </form>
  </div>
  <?php endif; ?>

  <!-- BUSCA -->
  <form method="GET" action="unidades.php" class="flex gap-2">
    <div class="relative flex-1 max-w-sm">
      <i data-lucide="search" class="w-4 h-4 text-gray-400 absolute left-3 top-1/2 -translate-y-1/2"></i>
      <input type="text" name="busca" class="form-input pl-9" placeholder="Buscar por nome, código ou cidade..."
             value="<?= sanitizar($busca) ?>">
    </div>
    <button type="submit" class="btn-primary">Buscar</button>
    <?php if ($busca): ?><a href="unidades.php" class="btn-outline">Limpar</a><?php endif; ?>
  </form>

  <!-- TABELA DE UNIDADES -->
  <?php if (empty($unidades)): ?>
  <div class="card border border-dashed border-gray-300 text-center py-14">
    <i data-lucide="building-2" class="w-10 h-10 text-gray-300 mx-auto mb-3"></i>
    <p class="text-gray-500 text-sm">Nenhuma unidade cadastrada ainda.</p>
    <?php if (temPermissao('criar', $perfil)): ?>
    <a href="unidades.php?novo=1" class="btn-primary mt-3 inline-flex"><i data-lucide="plus" class="w-4 h-4"></i> Cadastrar primeira</a>
    <?php endif; ?>
  </div>
  <?php else: ?>
  <div class="card p-0 overflow-hidden">
    <div class="overflow-x-auto">
      <table class="w-full text-sm">
        <thead class="bg-gray-50 border-b border-gray-200">
          <tr>
            <th class="text-left px-4 py-3 font-semibold text-gray-600">Código</th>
            <th class="text-left px-4 py-3 font-semibold text-gray-600">Nome</th>
            <th class="text-left px-4 py-3 font-semibold text-gray-600 hidden sm:table-cell">Cidade / UF</th>
            <th class="text-left px-4 py-3 font-semibold text-gray-600 hidden md:table-cell">Gestor</th>
            <th class="text-left px-4 py-3 font-semibold text-gray-600 hidden lg:table-cell">Técnico</th>
            <?php if (temPermissao('editar', $perfil)): ?>
            <th class="text-center px-4 py-3 font-semibold text-gray-600">Ações</th>
            <?php endif; ?>
          </tr>
        </thead>
        <tbody class="divide-y divide-gray-100">
          <?php foreach ($unidades as $u): ?>
          <tr class="table-row">
            <td class="px-4 py-3">
              <span class="bg-actsafe-blue/10 text-actsafe-blue text-xs font-bold px-2 py-0.5 rounded-md">
                <?= sanitizar($u['codigo']) ?>
              </span>
            </td>
            <td class="px-4 py-3 font-medium text-actsafe-text"><?= sanitizar($u['nome']) ?></td>
            <td class="px-4 py-3 text-gray-500 hidden sm:table-cell">
              <?= sanitizar($u['cidade'] ?? '—') ?><?= $u['estado'] ? ' / ' . sanitizar($u['estado']) : '' ?>
            </td>
            <td class="px-4 py-3 hidden md:table-cell">
              <?php if (!empty($u['gestor_nome'])): ?>
              <div class="flex items-center gap-1.5">
                <span class="w-6 h-6 rounded-full bg-blue-100 text-actsafe-blue text-xs font-bold flex items-center justify-center flex-shrink-0">
                  <?= strtoupper(substr($u['gestor_nome'], 0, 1)) ?>
                </span>
                <span class="text-gray-700 text-xs"><?= sanitizar($u['gestor_nome']) ?></span>
              </div>
              <?php else: ?>
              <span class="text-gray-400 text-xs italic">Não definido</span>
              <?php endif; ?>
            </td>
            <td class="px-4 py-3 hidden lg:table-cell">
              <?php if (!empty($u['tecnico_nome'])): ?>
              <div class="flex items-center gap-1.5">
                <span class="w-6 h-6 rounded-full bg-orange-100 text-orange-600 text-xs font-bold flex items-center justify-center flex-shrink-0">
                  <?= strtoupper(substr($u['tecnico_nome'], 0, 1)) ?>
                </span>
                <span class="text-gray-700 text-xs"><?= sanitizar($u['tecnico_nome']) ?></span>
              </div>
              <?php else: ?>
              <span class="text-gray-400 text-xs italic">Não definido</span>
              <?php endif; ?>
            </td>
            <?php if (temPermissao('editar', $perfil)): ?>
            <td class="px-4 py-3 text-center">
              <div class="flex items-center justify-center gap-2">
                <a href="unidades.php?editar=<?= $u['id'] ?>" class="text-actsafe-blue hover:text-actsafe-dark" title="Editar">
                  <i data-lucide="pencil" class="w-4 h-4"></i>
                </a>
                <?php if (temPermissao('excluir', $perfil)): ?>
                <form method="POST" action="unidades.php" onsubmit="return confirm('Excluir a unidade <?= sanitizar($u['nome']) ?>?')" class="inline">
                  <input type="hidden" name="acao_form" value="excluir">
                  <input type="hidden" name="id" value="<?= $u['id'] ?>">
                  <button type="submit" class="text-red-400 hover:text-red-600" title="Excluir">
                    <i data-lucide="trash-2" class="w-4 h-4"></i>
                  </button>
                </form>
                <?php endif; ?>
              </div>
            </td>
            <?php endif; ?>
          </tr>
          <?php endforeach; ?>
        </tbody>
      </table>
    </div>
    <div class="px-4 py-2 bg-gray-50 border-t border-gray-100 text-xs text-gray-500">
      <?= count($unidades) ?> unidade(s) encontrada(s)
    </div>
  </div>
  <?php endif; ?>
</div>

<?php require_once '../1_frontend/layout_footer.php'; ?>
