<?php

namespace App\Filters;

use CodeIgniter\Filters\FilterInterface;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;

class AdminAuthFilter implements FilterInterface
{
    public function before(RequestInterface $request, $arguments = null)
    {
        if (! session()->get('admin_user_id')) {
            return redirect()->to('/admin/login');
        }

        // فحص انتهاء الصلاحية على كل طلب - لو انتهت أثناء استخدامه (وهو مسجل دخول بالفعل) يتقفل تلقائياً
        if (! session()->get('is_super_admin')) {
            $userModel = new \App\Models\UserModel();
            $user = $userModel->find(session()->get('admin_user_id'));

            if (! $user || $userModel->isExpired($user)) {
                session()->remove(['admin_user_id', 'admin_name', 'company_id', 'active_company_id', 'is_super_admin']);
                return redirect()->to('/admin/login')->with('error', 'انتهت صلاحية حسابك. يرجى التواصل مع إدارة النظام لتجديد الاشتراك.');
            }
        }

        // حماية إضافية: لو سوبر أدمن ومفيش شركة نشطة مختارة بعد،
        // امنعه من دخول أي صفحة بتحتاج سياق شركة (عدا الشركات/المستخدمين/تبديل الشركة)
        $uri = (string) $request->getUri();
        $exempt = ['/admin/companies', '/admin/users', '/admin/switch-company', '/admin/dashboard', '/admin/logout'];

        $isExempt = false;
        foreach ($exempt as $path) {
            if (str_contains($uri, $path)) {
                $isExempt = true;
                break;
            }
        }

        if (session()->get('is_super_admin') && ! session()->get('active_company_id') && ! $isExempt) {
            return redirect()->to('/admin/dashboard')->with('error', 'اختر "الشركة النشطة" أولاً من القائمة أعلى الشريط الجانبي.');
        }
    }

    public function after(RequestInterface $request, ResponseInterface $response, $arguments = null) {}
}
