<?php
namespace App\Modules\Auth\Controllers;

class AuthController extends \Core\Controller {

    public function login() {
        if (isset($_SESSION['user_id'])) redirect('/');

        $timeout = isset($_GET['timeout']) ? true : false;
        $this->view('Auth/Views/login', [
            'title'   => 'تسجيل الدخول | OTIS Life System',
            'timeout' => $timeout,
        ], false);
    }

    public function authenticate() {
        if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
            redirect('/auth/login');
        }

        verify_csrf_token($_POST['csrf_token'] ?? '');

        $ip       = $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
        $ip       = trim(explode(',', $ip)[0]); // Handle proxies
        $username = trim($_POST['username'] ?? '');
        $password = $_POST['password'] ?? '';

        // ── Rate Limiting ────────────────────────────────────────
        if (is_rate_limited($ip)) {
            set_flash_message('auth_error',
                'تم تجاوز الحد الأقصى لمحاولات الدخول. يرجى الانتظار 15 دقيقة والمحاولة مرة أخرى.',
                'danger'
            );
            redirect('/auth/login');
        }

        // ── Credential Check ────────────────────────────────────
        $db   = \Core\Database::getInstance();
        $user = $db->query(
            "SELECT id, username, password_hash FROM users WHERE username = ? LIMIT 1",
            [$username]
        )->fetch();

        if ($user && password_verify($password, $user->password_hash)) {
            // ── Successful Login ─────────────────────────────────
            clear_login_attempts($ip);
            session_regenerate_id(true);

            $_SESSION['user_id']        = $user->id;
            $_SESSION['username']       = $user->username;
            $_SESSION['_last_activity'] = time();

            // Load user settings
            try {
                require_once __DIR__ . '/../../System/Models/UserSettingsModel.php';
                $setMdl   = new \App\Modules\System\Models\UserSettingsModel();
                $settings = $setMdl->getSettings($user->id);
                $_SESSION['theme']    = $settings->theme    ?? 'light';
                $_SESSION['timezone'] = $settings->timezone ?? 'Africa/Cairo';
                $_SESSION['currency'] = $settings->currency ?? 'EGP';
                // Onboarding flag
                $_SESSION['onboarding_done'] = (bool)($settings->onboarding_done ?? false);
            } catch (\Throwable $e) {
                $_SESSION['theme']           = 'light';
                $_SESSION['onboarding_done'] = false;
            }

            set_flash_message('system', 'أهلاً بك! تم تسجيل الدخول بنجاح.', 'success');
            redirect('/');

        } else {
            // ── Failed Login ─────────────────────────────────────
            record_login_attempt($ip, $username);
            $remaining = remaining_attempts($ip);
            $msg = 'اسم المستخدم أو كلمة المرور غير صحيحة.';
            if ($remaining <= 2 && $remaining > 0) {
                $msg .= " تحذير: لديك {$remaining} محاولة متبقية قبل الحظر المؤقت.";
            }
            set_flash_message('auth_error', $msg, 'danger');
            redirect('/auth/login');
        }
    }

    public function logout() {
        session_unset();
        session_destroy();
        session_start();
        session_regenerate_id(true);
        set_flash_message('system', 'تم تسجيل الخروج بنجاح. إلى اللقاء!', 'success');
        redirect('/auth/login');
    }
}
