<?php
declare(strict_types=1);

namespace App\Modules\SportsActivity;

final class SaConstants
{
    // Enrollment statuses (sa_group_players.status)
    const STATUS_ACTIVE = 'active';
    const STATUS_PENDING_PAYMENT = 'pending_payment';
    const STATUS_WITHDRAWN = 'withdrawn';
    const STATUS_TRANSFERRED = 'transferred';

    // Booking statuses (sa_bookings.status)
    const BOOKING_CONFIRMED = 'confirmed';
    const BOOKING_CANCELLED = 'cancelled';
    const BOOKING_NO_SHOW = 'no_show';
    const BOOKING_COMPLETED = 'completed';

    // Booking types
    const BOOKING_TYPE_HOURLY = 'hourly';
    const BOOKING_TYPE_TRAINING = 'training';

    // Payment statuses
    const PAYMENT_UNPAID = 'unpaid';
    const PAYMENT_PENDING = 'pending';
    const PAYMENT_PAID = 'paid';
    const PAYMENT_OVERDUE = 'overdue';
    const PAYMENT_REFUNDED = 'refunded';

    // Player types
    const PLAYER_MEMBER = 'member';
    const PLAYER_NON_MEMBER = 'non_member';

    // Booker types
    const BOOKER_MEMBER = 'member';
    const BOOKER_GUEST = 'guest';
    const BOOKER_ORGANIZATION = 'organization';

    // Participant modes
    const PARTICIPANT_MODE_FULL = 'full';
    const PARTICIPANT_MODE_PARTIAL = 'partial';
    const PARTICIPANT_MODE_PASSES = 'passes';

    // Booking pass statuses
    const PASS_ISSUED = 'issued';
    const PASS_USED = 'used';
    const PASS_EXPIRED = 'expired';
    const PASS_CANCELLED = 'cancelled';

    // Pool ticket statuses
    const TICKET_ISSUED = 'issued';
    const TICKET_ACTIVE = 'active';
    const TICKET_COMPLETED = 'completed';
    const TICKET_CANCELLED = 'cancelled';

    // Pool access modes
    const ACCESS_RESERVED = 'reserved';
    const ACCESS_OPEN = 'open_access';

    // Medical statuses
    const MEDICAL_FIT = 'fit';
    const MEDICAL_CONDITIONAL = 'conditional';
    const MEDICAL_PENDING = 'pending';
    const MEDICAL_EXPIRED = 'expired';
    const MEDICAL_UNFIT = 'unfit';

    // Card statuses
    const CARD_ACTIVE = 'active';
    const CARD_TEMPORARY = 'temporary';
    const CARD_SUSPENDED = 'suspended';
    const CARD_REVOKED = 'revoked';
    const CARD_EXPIRED = 'expired';

    // Pool grid actions
    const GRID_TRAINING = 'training';
    const GRID_BLOCKED = 'blocked';
    const GRID_MAINTENANCE = 'maintenance';
    const GRID_HOURLY = 'hourly';

    // Registration statuses
    const REG_IN_PROGRESS = 'in_progress';
    const REG_PENDING_PAYMENT = 'pending_payment';
    const REG_COMPLETED = 'completed';
    const REG_CANCELLED = 'cancelled';

    // Payment types (used with PaymentRequestService)
    const PAY_TYPE_SPORTS_REG = 'sports_registration';
    const PAY_TYPE_HOURLY_BOOKING = 'hourly_booking';
    const PAY_TYPE_FORM_FEE = 'sa_form_fee';
    const PAY_TYPE_SPORTS_SUB = 'sports_subscription';
    const PAY_TYPE_CARD_RENEWAL = 'sa_card_renewal';

    // Entity types (related_entity_type)
    const ENTITY_GROUP_PLAYERS = 'sa_group_players';
    const ENTITY_SUBSCRIPTIONS = 'sa_subscriptions';
    const ENTITY_BOOKINGS = 'sa_bookings';
    const ENTITY_REGISTRATIONS = 'sa_registrations';
    const ENTITY_REG_FORM = 'sa_registration_form';
    const ENTITY_PLAYER_CARDS = 'sa_player_cards';
    const ENTITY_GAME_TICKETS = 'sa_game_tickets';
    const ENTITY_POOL_TICKETS = 'sa_pool_tickets';

    // Group statuses
    const GROUP_ACTIVE = 'active';
    const GROUP_PAUSED = 'paused';
    const GROUP_COMPLETED = 'completed';
    const GROUP_CANCELLED = 'cancelled';

    // Cancelled booking statuses (for exclusion)
    const EXCLUDED_STATUSES = ['cancelled', 'no_show'];
}
