<?php

class Auth {
    /**
     * Check if user is logged in
     */
    public static function check(): bool {
        return Session::has('user_id');
    }

    /**
     * Get logged-in user array
     */
    public static function user(): ?array {
        if (!self::check()) {
            return null;
        }

        static $cachedUser = null;
        if ($cachedUser === null) {
            $userModel = new User();
            $cachedUser = $userModel->findById(Session::get('user_id'));
        }
        return $cachedUser;
    }

    /**
     * Get seller profile array if user is an approved/pending seller
     */
    public static function sellerProfile(): ?array {
        $user = self::user();
        if (!$user) return null;

        static $cachedSeller = null;
        if ($cachedSeller === null) {
            $sellerModel = new SellerProfile();
            $cachedSeller = $sellerModel->findOneWhere(['user_id' => $user['id']]);
        }
        return $cachedSeller;
    }

    /**
     * Check if current user is Admin
     */
    public static function isAdmin(): bool {
        $user = self::user();
        return $user && $user['role'] === 'admin';
    }

    /**
     * Check if current user is an Approved Seller
     */
    public static function isApprovedSeller(): bool {
        $seller = self::sellerProfile();
        return $seller && in_array($seller['status'], ['approved', 'suspended']) && $seller['deleted_at'] === null;
    }

    /**
     * Middleware: Require logged in user
     */
    public static function requireAuth(): void {
        if (!self::check()) {
            Session::setFlash('warning', 'Please login to access this page.');
            header('Location: ' . APP_URL . '/login');
            exit;
        }
    }

    /**
     * Middleware: Require Admin
     */
    public static function requireAdmin(): void {
        self::requireAuth();
        if (!self::isAdmin()) {
            Session::setFlash('danger', 'Access denied. Administrator privileges required.');
            header('Location: ' . APP_URL . '/');
            exit;
        }
    }

    /**
     * Middleware: Require Approved Seller
     */
    public static function requireSeller(): void {
        self::requireAuth();
        if (!self::isApprovedSeller()) {
            Session::setFlash('danger', 'Access denied. You must be an approved seller to access the seller dashboard.');
            header('Location: ' . APP_URL . '/seller/apply');
            exit;
        }
    }
}
