<?php
// login.php

session_start();

// ────────────────────────────────────────────────
//   CONFIG / CONSTANTS
// ────────────────────────────────────────────────
define('MAX_LOGIN_ATTEMPTS', 5);
define('LOCKOUT_MINUTES', 15);

// For demo only — in real project use proper database
$users = [
    'admin' => password_hash('Password123!', PASSWORD_DEFAULT),
    'user1' => password_hash('letmein2025', PASSWORD_DEFAULT),
];

// ────────────────────────────────────────────────
//   HELPER FUNCTIONS
// ────────────────────────────────────────────────
function isLockedOut(): bool {
    if (!isset($_SESSION['login_attempts'])) {
        return false;
    }
    if ($_SESSION['login_attempts'] < MAX_LOGIN_ATTEMPTS) {
        return false;
    }
    
    $timeSinceLock = time() - ($_SESSION['lockout_time'] ?? 0);
    $lockoutSeconds = LOCKOUT_MINUTES * 60;
    
    if ($timeSinceLock < $lockoutSeconds) {
        return true;
    }
    
    // Lockout expired → reset
    unset($_SESSION['login_attempts']);
    unset($_SESSION['lockout_time']);
    return false;
}

function recordFailedAttempt(): void {
    if (!isset($_SESSION['login_attempts'])) {
        $_SESSION['login_attempts'] = 0;
    }
    $_SESSION['login_attempts']++;
    
    if ($_SESSION['login_attempts'] >= MAX_LOGIN_ATTEMPTS) {
        $_SESSION['lockout_time'] = time();
    }
}

// ────────────────────────────────────────────────
//   PROCESS LOGIN
// ────────────────────────────────────────────────
$errors = [];
$success = false;

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    
    if (isLockedOut()) {
        $errors[] = "Account temporarily locked due to too many failed attempts. Try again in " . LOCKOUT_MINUTES . " minutes.";
    } 
    else if (empty($_POST['username']) || empty($_POST['password'])) {
        $errors[] = "Both fields are required.";
        recordFailedAttempt();
    } 
    else {
        $username = trim($_POST['username']);
        $password = $_POST['password'];
        
        // In real app: query database here
        if (isset($users[$username]) && password_verify($password, $users[$username])) {
            // Success
            $_SESSION['user'] = $username;
            $_SESSION['logged_in'] = true;
            $_SESSION['login_time'] = time();
            
            // Reset failed attempts
            unset($_SESSION['login_attempts']);
            unset($_SESSION['lockout_time']);
            
            $success = true;
            // header("Location: dashboard.php"); exit;   ← uncomment in real app
        } else {
            $errors[] = "Invalid username or password.";
            recordFailedAttempt();
        }
    }
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  <title>Login • Secure Example</title>
  <style>
    :root {
      --primary: #6366f1;
      --danger: #ef4444;
      --success: #10b981;
      --gray: #6b7280;
      --light: #f3f4f6;
    }
    
    body {
      font-family: system-ui, -apple-system, sans-serif;
      background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
      min-height: 100vh;
      margin: 0;
      display: grid;
      place-items: center;
      color: #111;
    }
    
    .login-card {
      background: white;
      padding: 2.5rem 2rem;
      border-radius: 1rem;
      box-shadow: 0 20px 25px -5px rgba(0,0,0,0.2);
      width: 100%;
      max-width: 420px;
    }
    
    h1 {
      text-align: center;
      margin: 0 0 1.8rem;
      color: var(--primary);
      font-size: 1.8rem;
    }
    
    .form-group {
      margin-bottom: 1.4rem;
    }
    
    label {
      display: block;
      margin-bottom: 0.5rem;
      font-weight: 500;
      color: #374151;
    }
    
    input {
      width: 100%;
      padding: 0.75rem 1rem;
      border: 1px solid #d1d5db;
      border-radius: 0.5rem;
      font-size: 1rem;
      box-sizing: border-box;
    }
    
    input:focus {
      outline: none;
      border-color: var(--primary);
      box-shadow: 0 0 0 3px rgba(99,102,241,0.2);
    }
    
    .btn {
      width: 100%;
      padding: 0.9rem;
      background: var(--primary);
      color: white;
      border: none;
      border-radius: 0.5rem;
      font-size: 1.05rem;
      font-weight: 600;
      cursor: pointer;
      transition: all 0.2s;
    }
    
    .btn:hover {
      background: #4f46e5;
      transform: translateY(-1px);
    }
    
    .error {
      color: var(--danger);
      font-size: 0.9rem;
      margin: 0.5rem 0;
      padding: 0.6rem 1rem;
      background: #fee2e2;
      border-radius: 0.5rem;
    }
    
    .success {
      color: var(--success);
      text-align: center;
      font-weight: 600;
      margin: 1rem 0;
    }
    
    .locked {
      color: var(--danger);
      text-align: center;
      font-weight: bold;
      margin: 1.5rem 0;
    }
  </style>
</head>
<body>

<div class="login-card">
  <h1>Sign In</h1>

  <?php if ($success): ?>
    <div class="success">
      Login successful! Welcome back, <?= htmlspecialchars($_SESSION['user']) ?> 🎉<br>
      <small>(In real app you would be redirected now)</small>
    </div>
  <?php endif; ?>

  <?php if (isLockedOut()): ?>
    <div class="locked">
      Too many failed attempts.<br>
      Please wait <?= LOCKOUT_MINUTES ?> minutes.
    </div>
  <?php elseif (!empty($errors)): ?>
    <?php foreach ($errors as $err): ?>
      <div class="error"><?= htmlspecialchars($err) ?></div>
    <?php endforeach; ?>
  <?php endif; ?>

  <?php if (!$success && !isLockedOut()): ?>
  <form method="post" autocomplete="on">
    <div class="form-group">
      <label for="username">Username</label>
      <input 
        type="text" 
        id="username" 
        name="username" 
        autocomplete="username"
        value="<?= htmlspecialchars($_POST['username'] ?? '') ?>"
        required
      >
    </div>
    
    <div class="form-group">
      <label for="password">Password</label>
      <input 
        type="password" 
        id="password" 
        name="password" 
        autocomplete="current-password"
        required
      >
    </div>

    <button type="submit" class="btn">Login</button>
  </form>
  <?php endif; ?>

</div>

</body>
</html>