<?php
/**
 * reset_senha.php — Ferramenta de emergência para redefinir senha
 *
 * ⚠️  REMOVA ESTE ARQUIVO APÓS USO!
 *
 * Acesse: http://localhost:8002/mkt_telecom/reset_senha.php
 * Não requer login — use apenas para recuperação de acesso.
 */

// Segurança mínima: só funciona de localhost
$ip = $_SERVER['REMOTE_ADDR'] ?? '';
$localIPs = ['127.0.0.1', '::1', '::ffff:127.0.0.1'];
$isLocal  = in_array($ip, $localIPs) || str_starts_with($ip, '192.168.') || str_starts_with($ip, '10.');
if (!$isLocal) {
    http_response_code(403);
    die('Acesso negado. Esta ferramenta só funciona na rede local.');
}

require_once __DIR__ . '/config.php';

$msg   = '';
$erro  = '';
$users = [];

try {
    // Tenta conectar
    $pdo = pdo();
    $users = $pdo->query("SELECT id, nome, login, perfil, ativo FROM usuarios ORDER BY id")->fetchAll();
} catch (Throwable $e) {
    $erro = 'Erro de conexão com o banco: ' . $e->getMessage();
}

// ── POST: redefinir senha ──
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !$erro) {
    $login     = trim($_POST['login']  ?? '');
    $novaSenha = trim($_POST['senha']  ?? '');
    $confirma  = trim($_POST['confirma'] ?? '');

    if (!$login || !$novaSenha) {
        $erro = 'Preencha todos os campos.';
    } elseif (strlen($novaSenha) < 4) {
        $erro = 'Senha muito curta (mínimo 4 caracteres).';
    } elseif ($novaSenha !== $confirma) {
        $erro = 'As senhas não coincidem.';
    } else {
        $hash = password_hash($novaSenha, PASSWORD_BCRYPT, ['cost' => 12]);

        // Verifica se o hash funciona imediatamente
        if (!password_verify($novaSenha, $hash)) {
            $erro = 'Erro interno: hash gerado não é verificável. PHP bcrypt pode estar desativado.';
        } else {
            $stmt = pdo()->prepare("UPDATE usuarios SET senha_hash=?, ativo=1 WHERE login=?");
            $stmt->execute([$hash, $login]);

            if ($stmt->rowCount() > 0) {
                $msg = "✓ Senha de <b>$login</b> redefinida com sucesso! Faça login agora.";
                $users = pdo()->query("SELECT id, nome, login, perfil, ativo FROM usuarios ORDER BY id")->fetchAll();
            } else {
                // Usuário não existe — cria
                pdo()->prepare(
                    "INSERT INTO usuarios (nome, login, senha_hash, perfil, ativo) VALUES (?,?,?,'ADMIN',1)"
                )->execute(["Admin ($login)", $login, $hash]);
                $msg = "✓ Usuário <b>$login</b> criado com perfil ADMIN. Faça login agora.";
            }
        }
    }
}
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>Reset de Senha — MKT Telecom</title>
<style>
*{box-sizing:border-box;margin:0;padding:0}
body{background:#090e1b;color:#dde8f5;font-family:'Segoe UI',Arial,sans-serif;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}
.card{background:#0f1729;border:1px solid #1e3356;border-radius:14px;padding:32px 36px;width:460px;max-width:100%}
h2{font-size:18px;color:#00d4ff;margin-bottom:4px}
.sub{font-size:12px;color:#5a7a9a;margin-bottom:24px;font-family:monospace}
.warn{background:rgba(239,68,68,.12);border:1px solid rgba(239,68,68,.3);border-radius:8px;padding:10px 14px;font-size:12px;color:#fca5a5;margin-bottom:20px}
.ok{background:rgba(16,185,129,.12);border:1px solid rgba(16,185,129,.3);border-radius:8px;padding:10px 14px;font-size:12px;color:#6ee7b7;margin-bottom:20px}
label{font-size:10px;font-family:monospace;color:#5a7a9a;letter-spacing:1px;display:block;margin-bottom:5px;text-transform:uppercase}
input,select{width:100%;background:#141e33;border:1px solid #1e3356;border-radius:7px;padding:10px 12px;color:#dde8f5;font-size:13px;outline:none;margin-bottom:14px;font-family:inherit}
input:focus,select:focus{border-color:#00d4ff}
select option{background:#141e33}
.btn{width:100%;background:#00d4ff;color:#050e1a;border:none;border-radius:8px;padding:12px;font-size:14px;font-weight:700;cursor:pointer}
.btn:hover{background:#22dcff}
.users-table{width:100%;border-collapse:collapse;margin-top:20px;font-size:12px}
.users-table th{text-align:left;padding:6px 10px;color:#5a7a9a;font-family:monospace;font-size:10px;letter-spacing:1px;border-bottom:1px solid #1e3356}
.users-table td{padding:7px 10px;border-bottom:1px solid rgba(30,51,86,.5)}
.badge{display:inline-block;padding:1px 7px;border-radius:10px;font-size:10px;font-weight:700}
.badge-admin{background:rgba(0,212,255,.12);color:#00d4ff}
.badge-tec{background:rgba(139,92,246,.12);color:#8b5cf6}
.badge-op{background:rgba(90,122,154,.12);color:#5a7a9a}
.badge-on{background:rgba(16,185,129,.12);color:#10b981}
.badge-off{background:rgba(239,68,68,.12);color:#ef4444}
.sep{border:none;border-top:1px solid #1e3356;margin:20px 0}
a{color:#00d4ff;text-decoration:none}
a:hover{text-decoration:underline}
</style>
</head>
<body>
<div class="card">
  <h2>🔑 Reset de Senha</h2>
  <div class="sub">Ferramenta de emergência · <?= htmlspecialchars(APP_NAME) ?> · Remova após uso!</div>

  <div class="warn">
    ⚠ <b>ATENÇÃO:</b> Apague este arquivo após recuperar o acesso.<br>
    Caminho: <code>mkt_telecom/reset_senha.php</code>
  </div>

  <?php if ($msg):  ?><div class="ok"><?= $msg ?> &nbsp; <a href="login.php">→ Ir para o Login</a></div><?php endif; ?>
  <?php if ($erro): ?><div class="warn">✕ <?= htmlspecialchars($erro) ?></div><?php endif; ?>

  <form method="post">
    <label>Login / Usuário</label>
    <select name="login">
      <?php if ($users): foreach ($users as $u): ?>
        <option value="<?= htmlspecialchars($u['login']) ?>"><?= htmlspecialchars($u['login']) ?> (<?= $u['perfil'] ?>)</option>
      <?php endforeach; else: ?>
        <option value="admin">admin</option>
      <?php endif; ?>
      <option value="__novo__">── Criar novo usuário admin ──</option>
    </select>

    <!-- Campo login manual para criar novo -->
    <div id="novo-login-wrap" style="display:none">
      <label>Novo Login</label>
      <input type="text" id="novo-login-input" placeholder="Ex: admin2"/>
    </div>

    <label>Nova Senha</label>
    <input type="password" name="senha" placeholder="Mínimo 4 caracteres" required/>

    <label>Confirmar Senha</label>
    <input type="password" name="confirma" placeholder="Repita a senha" required/>

    <button type="submit" class="btn">✓ Redefinir Senha</button>
  </form>

  <?php if ($users): ?>
  <hr class="sep"/>
  <div style="font-size:10px;font-family:monospace;color:#5a7a9a;letter-spacing:1px;margin-bottom:8px">USUÁRIOS CADASTRADOS</div>
  <table class="users-table">
    <thead><tr><th>LOGIN</th><th>NOME</th><th>PERFIL</th><th>STATUS</th></tr></thead>
    <tbody>
    <?php foreach ($users as $u): ?>
      <tr>
        <td style="font-family:monospace"><?= htmlspecialchars($u['login']) ?></td>
        <td><?= htmlspecialchars($u['nome']) ?></td>
        <td><span class="badge badge-<?= strtolower($u['perfil'])==='admin'?'admin':(strtolower($u['perfil'])==='tecnico'?'tec':'op') ?>"><?= $u['perfil'] ?></span></td>
        <td><span class="badge <?= $u['ativo']?'badge-on':'badge-off' ?>"><?= $u['ativo']?'ATIVO':'INATIVO' ?></span></td>
      </tr>
    <?php endforeach; ?>
    </tbody>
  </table>
  <?php endif; ?>

  <hr class="sep"/>
  <div style="font-size:11px;color:#5a7a9a;text-align:center">
    <a href="login.php">← Voltar ao Login</a>
  </div>
</div>

<script>
document.querySelector('select[name=login]').addEventListener('change', function() {
  const wrap = document.getElementById('novo-login-wrap');
  const inp  = document.getElementById('novo-login-input');
  if (this.value === '__novo__') {
    wrap.style.display = 'block';
    inp.name = 'login';
    this.name = '_login_disabled';
  } else {
    wrap.style.display = 'none';
    inp.name = '_disabled';
    this.name = 'login';
  }
});
</script>
</body>
</html>
