<?php
/**
 * SOMOS AGRO - Recuperação de Senha
 */

require_once __DIR__ . '/config/config.php';
require_once __DIR__ . '/config/security.php';
require_once __DIR__ . '/core/helpers.php';

$mensagem = '';
$tipo = '';
$mostrarFormulario = true;

// Processar solicitação de reset
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'solicitar') {
    
    if (!isset($_POST['csrf_token']) || !validateCSRFToken($_POST['csrf_token'])) {
        $mensagem = 'Token de segurança inválido.';
        $tipo = 'error';
    } else {
        $email = sanitize($_POST['email']);
        
        if (empty($email)) {
            $mensagem = 'Por favor, informe seu email.';
            $tipo = 'error';
        } elseif (!validateEmail($email)) {
            $mensagem = 'Email inválido.';
            $tipo = 'error';
        } else {
            $db = Database::getInstance();
            
            // Verificar se email existe
            $stmt = $db->prepare("SELECT id, nome FROM users WHERE email = ? AND estado = 'ativo'");
            $stmt->bind_param("s", $email);
            $stmt->execute();
            $result = $stmt->get_result();
            
            if ($result->num_rows > 0) {
                $user = $result->fetch_assoc();
                
                // Gerar token de reset
                $token = bin2hex(random_bytes(32));
                $expira = date('Y-m-d H:i:s', strtotime('+1 hour'));
                
                // Salvar token (você pode criar uma tabela password_resets ou usar sessão)
                $_SESSION['reset_token'] = $token;
                $_SESSION['reset_email'] = $email;
                $_SESSION['reset_expira'] = $expira;
                
                $mensagem = 'Um link de recuperação foi gerado. Use o código abaixo para resetar sua senha.';
                $tipo = 'success';
                $_SESSION['token_gerado'] = $token;
                $mostrarFormulario = false;
            } else {
                // Por segurança, não informar que o email não existe
                $mensagem = 'Se o email existir em nosso sistema, você receberá instruções para recuperação.';
                $tipo = 'info';
            }
        }
    }
}

// Processar reset de senha com token
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'resetar') {
    
    if (!isset($_POST['csrf_token']) || !validateCSRFToken($_POST['csrf_token'])) {
        $mensagem = 'Token de segurança inválido.';
        $tipo = 'error';
    } else {
        $token = sanitize($_POST['token']);
        $novaSenha = $_POST['nova_senha'];
        $confirmarSenha = $_POST['confirmar_senha'];
        
        if (empty($token) || empty($novaSenha) || empty($confirmarSenha)) {
            $mensagem = 'Todos os campos são obrigatórios.';
            $tipo = 'error';
        } elseif (strlen($novaSenha) < PASSWORD_MIN_LENGTH) {
            $mensagem = 'A senha deve ter no mínimo ' . PASSWORD_MIN_LENGTH . ' caracteres.';
            $tipo = 'error';
        } elseif ($novaSenha !== $confirmarSenha) {
            $mensagem = 'As senhas não coincidem.';
            $tipo = 'error';
        } elseif (!isset($_SESSION['reset_token']) || $_SESSION['reset_token'] !== $token) {
            $mensagem = 'Token inválido ou expirado.';
            $tipo = 'error';
        } elseif (strtotime($_SESSION['reset_expira']) < time()) {
            $mensagem = 'Token expirado. Solicite um novo.';
            $tipo = 'error';
            unset($_SESSION['reset_token'], $_SESSION['reset_email'], $_SESSION['reset_expira']);
        } else {
            $db = Database::getInstance();
            $email = $_SESSION['reset_email'];
            
            // Atualizar senha
            $senhaHash = hashPassword($novaSenha);
            $stmt = $db->prepare("UPDATE users SET senha = ?, updated_at = NOW() WHERE email = ?");
            $stmt->bind_param("ss", $senhaHash, $email);
            
            if ($stmt->execute()) {
                $mensagem = 'Senha alterada com sucesso! Você já pode fazer login.';
                $tipo = 'success';
                
                // Limpar sessão
                unset($_SESSION['reset_token'], $_SESSION['reset_email'], $_SESSION['reset_expira'], $_SESSION['token_gerado']);
                
                // Limpar tentativas de login
                if (isset($_SESSION['login_attempts'][$email])) {
                    unset($_SESSION['login_attempts'][$email]);
                }
                
                $mostrarFormulario = false;
            } else {
                $mensagem = 'Erro ao alterar senha. Tente novamente.';
                $tipo = 'error';
            }
        }
    }
}
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Recuperar Senha - SOMOS AGRO</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    <style>
        body {
            background: linear-gradient(135deg, #2e7d32 0%, #4caf50 50%, #81c784 100%);
            min-height: 100vh;
            display: flex;
            align-items: center;
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
        }
        .recovery-container {
            max-width: 500px;
            margin: auto;
        }
        .recovery-card {
            background: white;
            border-radius: 20px;
            box-shadow: 0 15px 50px rgba(0,0,0,0.3);
            overflow: hidden;
        }
        .recovery-header {
            background: linear-gradient(135deg, #2e7d32 0%, #4caf50 100%);
            color: white;
            padding: 40px 30px;
            text-align: center;
        }
        .recovery-logo {
            font-size: 60px;
            margin-bottom: 15px;
        }
        .recovery-body {
            padding: 40px 30px;
        }
        .form-control {
            border-radius: 10px;
            padding: 12px 15px;
            border: 2px solid #e0e0e0;
        }
        .form-control:focus {
            border-color: #4caf50;
            box-shadow: 0 0 0 0.2rem rgba(76, 175, 80, 0.25);
        }
        .btn-recovery {
            background: linear-gradient(135deg, #2e7d32 0%, #4caf50 100%);
            border: none;
            border-radius: 10px;
            padding: 12px;
            font-size: 16px;
            font-weight: 600;
            color: white;
            width: 100%;
            transition: all 0.3s;
        }
        .btn-recovery:hover {
            transform: translateY(-2px);
            box-shadow: 0 5px 15px rgba(46, 125, 50, 0.4);
        }
        .token-box {
            background: #f5f5f5;
            border: 2px dashed #4caf50;
            border-radius: 10px;
            padding: 20px;
            text-align: center;
            margin: 20px 0;
        }
        .token-code {
            font-size: 24px;
            font-weight: bold;
            color: #2e7d32;
            letter-spacing: 2px;
            font-family: 'Courier New', monospace;
        }
        .back-link {
            text-align: center;
            margin-top: 20px;
        }
        .back-link a {
            color: #4caf50;
            text-decoration: none;
            font-weight: 500;
        }
        .back-link a:hover {
            text-decoration: underline;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="recovery-container">
            <div class="recovery-card">
                <div class="recovery-header">
                    <div class="recovery-logo">
                        <i class="fas fa-key"></i>
                    </div>
                    <h2 class="mb-0">Recuperar Senha</h2>
                    <p class="mb-0 mt-2">SOMOS AGRO</p>
                </div>
                
                <div class="recovery-body">
                    <?php if ($mensagem): ?>
                        <div class="alert alert-<?= $tipo === 'success' ? 'success' : ($tipo === 'error' ? 'danger' : 'info') ?> alert-dismissible fade show" role="alert">
                            <i class="fas fa-<?= $tipo === 'success' ? 'check-circle' : 'exclamation-circle' ?> me-2"></i>
                            <?= htmlspecialchars($mensagem) ?>
                            <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
                        </div>
                    <?php endif; ?>
                    
                    <?php if (isset($_SESSION['token_gerado'])): ?>
                        <div class="token-box">
                            <p class="mb-2"><strong>Código de Recuperação:</strong></p>
                            <div class="token-code"><?= htmlspecialchars($_SESSION['token_gerado']) ?></div>
                            <small class="text-muted d-block mt-2">Copie este código e use no formulário abaixo</small>
                        </div>
                        
                        <form method="POST" action="">
                            <?= csrfField() ?>
                            <input type="hidden" name="action" value="resetar">
                            
                            <div class="mb-3">
                                <label class="form-label">Código de Recuperação</label>
                                <input type="text" class="form-control" name="token" placeholder="Cole o código aqui" required>
                            </div>
                            
                            <div class="mb-3">
                                <label class="form-label">Nova Senha</label>
                                <input type="password" class="form-control" name="nova_senha" placeholder="Mínimo 6 caracteres" required minlength="6">
                            </div>
                            
                            <div class="mb-4">
                                <label class="form-label">Confirmar Nova Senha</label>
                                <input type="password" class="form-control" name="confirmar_senha" placeholder="Digite a senha novamente" required minlength="6">
                            </div>
                            
                            <button type="submit" class="btn btn-recovery">
                                <i class="fas fa-check me-2"></i> Alterar Senha
                            </button>
                        </form>
                    
                    <?php elseif ($mostrarFormulario && $tipo !== 'success'): ?>
                        <h5 class="text-center mb-4">Informe seu email cadastrado</h5>
                        
                        <form method="POST" action="">
                            <?= csrfField() ?>
                            <input type="hidden" name="action" value="solicitar">
                            
                            <div class="mb-4">
                                <label class="form-label">Email</label>
                                <div class="input-group">
                                    <span class="input-group-text" style="background: #f5f5f5; border: 2px solid #e0e0e0; border-right: none; border-radius: 10px 0 0 10px;">
                                        <i class="fas fa-envelope"></i>
                                    </span>
                                    <input type="email" class="form-control" name="email" placeholder="seu@email.com" required style="border-left: none; border-radius: 0 10px 10px 0;">
                                </div>
                            </div>
                            
                            <button type="submit" class="btn btn-recovery">
                                <i class="fas fa-paper-plane me-2"></i> Gerar Código de Recuperação
                            </button>
                        </form>
                    <?php endif; ?>
                    
                    <?php if ($tipo === 'success' && !$mostrarFormulario && !isset($_SESSION['token_gerado'])): ?>
                        <div class="text-center">
                            <a href="index.php" class="btn btn-recovery">
                                <i class="fas fa-sign-in-alt me-2"></i> Ir para Login
                            </a>
                        </div>
                    <?php endif; ?>
                    
                    <div class="back-link">
                        <a href="index.php">
                            <i class="fas fa-arrow-left me-1"></i> Voltar para Login
                        </a>
                    </div>
                </div>
            </div>
            
            <div class="text-center mt-4 text-white">
                <small>&copy; <?= date('Y') ?> SOMOS AGRO - Todos os direitos reservados</small>
            </div>
        </div>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>