import type { ReactNode } from "react";
import { usePage } from "@inertiajs/react";
import type { PageProps } from "@inertiajs/core";

interface SharedProps extends PageProps {
    auth: {
        permissions?: string[];
    };
}

type CanProps = {
    permission?: string;
    admin?: boolean;
    fallback?: ReactNode;
    children: ReactNode;
};

export function Can({ permission, admin = false, fallback = null, children }: CanProps) {
    const { auth } = usePage<SharedProps>().props;
    const requiredPermission = admin ? "admin" : permission;

    if (!requiredPermission || !auth?.permissions?.includes(requiredPermission)) {
        return <>{fallback}</>;
    }

    return <>{children}</>;
}
