import { usePage } from '@inertiajs/react';
import {
    DEFAULT_HOURS_PER_CREDIT,
    DEFAULT_PARTICIPANTS_BAND,
    type CreditRule,
} from '@/lib/credits';

type SharedRule = {
    hours_per_credit?: unknown;
    participants_band?: unknown;
};

function toNumber(value: unknown, fallback: number): number {
    return typeof value === 'number' && Number.isFinite(value) && value > 0
        ? value
        : fallback;
}

/**
 * Le due costanti del listino, dalla prop condivisa `pricing`. Ogni pagina le
 * legge da qui invece di riceverle dal controller, così la regola resta una
 * sola anche fuori dall'area autenticata.
 */
export function useCreditRule(): Required<CreditRule> {
    const shared = usePage().props.pricing as SharedRule | undefined;

    return {
        hoursPerCredit: toNumber(
            shared?.hours_per_credit,
            DEFAULT_HOURS_PER_CREDIT,
        ),
        participantsBand: toNumber(
            shared?.participants_band,
            DEFAULT_PARTICIPANTS_BAND,
        ),
    };
}
