import { usePage } from '@inertiajs/react';
import { PageProps } from '@/types/global';

/**
 * 權限判斷 Hook
 * 提供權限與角色檢查功能
 */
export function usePermission() {
    const { auth } = usePage<PageProps>().props;
    const user = auth.user;

    /**
     * 檢查使用者是否擁有指定權限
     * 超級管理員自動擁有所有權限
     */
    const can = (permission: string): boolean => {
        if (!user) return false;
        if (user.roles.includes('super-admin')) return true;
        return user.permissions.includes(permission);
    };

    /**
     * 檢查使用者是否擁有任一指定權限
     * 超級管理員自動擁有所有權限
     */
    const canAny = (permissions: string[]): boolean => {
        if (!user) return false;
        if (user.roles.includes('super-admin')) return true;
        return permissions.some(p => user.permissions.includes(p));
    };

    /**
     * 檢查使用者是否擁有所有指定權限
     * 超級管理員自動擁有所有權限
     */
    const canAll = (permissions: string[]): boolean => {
        if (!user) return false;
        if (user.roles.includes('super-admin')) return true;
        return permissions.every(p => user.permissions.includes(p));
    };

    /**
     * 檢查使用者是否擁有指定角色
     */
    const hasRole = (role: string): boolean => {
        if (!user) return false;
        return user.roles.includes(role);
    };

    /**
     * 檢查使用者是否擁有任一指定角色
     */
    const hasAnyRole = (roles: string[]): boolean => {
        if (!user) return false;
        return roles.some(r => user.roles.includes(r));
    };

    /**
     * 檢查使用者是否擁有所有指定角色
     */
    const hasAllRoles = (roles: string[]): boolean => {
        if (!user) return false;
        return roles.every(r => user.roles.includes(r));
    };

    /**
     * 檢查使用者是否為超級管理員
     */
    const isSuperAdmin = (): boolean => {
        return hasRole('super-admin');
    };

    return {
        can,
        canAny,
        canAll,
        hasRole,
        hasAnyRole,
        hasAllRoles,
        isSuperAdmin,
        user
    };
}
