/* ============================= */
/* SHOP USER                     */
/* ============================= */

export const SHOP_USER_ROLES = [
    "MANAGER",
    "CASHIER",
    "STAFF",
    "RUNNER"
] as const

export type ShopUserRole = typeof SHOP_USER_ROLES[number]



/* ============================= */
/* STATION                       */
/* ============================= */

export const STATION_MAIN_TYPES = [
    "CASH",
    "PRODUCTION",
    "TRANSFORMATION",
    "MOBILE",
    "ADMIN"
] as const

export type StationMainType = typeof STATION_MAIN_TYPES[number]

export const STATION_PRODUCT_DEPOSIT_APPLICATION_MODES = [
    "REQUIRED",
    "SUGGESTED"
] as const

export type StationProductDepositApplicationMode = typeof STATION_PRODUCT_DEPOSIT_APPLICATION_MODES[number]



/* ============================= */
/* TRANSFER ROUTE                */
/* ============================= */

/**
 * Qui s'occupe du transport d'un produit entre deux stations
 *
 * RUNNER          — un ShopUser dédié au transport (rôle RUNNER)
 * SELF_CASHIER    — le ShopUser de la station source se déplace lui-même
 * SOURCE_STATION  — la station de production/transformation achemine d'elle-même
 */
export const TRANSFER_HANDLER_MODES = [
    "RUNNER",
    "SELF_CASHIER",
    "SOURCE_STATION"
] as const

export type TransferHandlerMode = typeof TRANSFER_HANDLER_MODES[number]



/* ============================= */
/* LOGISTICS ROUTE STEP          */
/* ============================= */

export const LOGISTICS_STEP_TYPES = [
    "PRODUCTION",
    "TRANSPORT",
] as const

export type LogisticsStepType = typeof LOGISTICS_STEP_TYPES[number]



/* ============================= */
/* ORDER                         */
/* ============================= */

export const ORDER_STATUSES = [
    "DRAFT",
    "PREPARING",
    "READY",
    "PENDING_PAYMENT",
    "PARTIALLY_PAID",
    "PAID",
    "CANCELLED"
] as const

export type OrderStatus = typeof ORDER_STATUSES[number]



/* ============================= */
/* ORDER ITEM                    */
/* ============================= */

export const ORDER_ITEM_STATUSES = [
    "PENDING",
    "PREPARING",
    "READY",
    "PICKED_UP",
    "DELIVERED",
    "CANCELLED"
] as const

export type OrderItemStatus = typeof ORDER_ITEM_STATUSES[number]



/* ============================= */
/* PRODUCTION                    */
/* ============================= */

export const PRODUCTION_STATUSES = [
    "PENDING",
    "PREPARING",
    "READY",
    "COMPLETED"
] as const

export type ProductionStatus = typeof PRODUCTION_STATUSES[number]

export const PRODUCTION_WORKFLOW_SYSTEM_ROLES = [
    "START",
    "INTERMEDIATE",
    "END",
] as const

export type ProductionWorkflowSystemRole = typeof PRODUCTION_WORKFLOW_SYSTEM_ROLES[number]



/* ============================= */
/* PAYMENT                       */
/* ============================= */

export const PAYMENT_METHODS = [
    "CASH",
    "CARD",
    "CHECK",
    "APPLE_PAY",
    "GOOGLE_PAY",
    "GIFT_CARD",
    "VOUCHER"
] as const

export type PaymentMethod = typeof PAYMENT_METHODS[number]



/* ============================= */
/* EXECUTION METHOD              */
/* ============================= */

export const EXECUTION_METHODS = [
    "MANUAL",       // Pas de provider (espèces, chèque, voucher)
    "READER",       // Terminal physique (SumUp Solo, Stripe Reader)
    "TAP_TO_PAY",   // NFC sur le téléphone du vendeur
    "HOSTED",       // Lien web / page de paiement
    "QR_CODE"       // QR code scanné par le client (futur)
] as const

export type ExecutionMethod = typeof EXECUTION_METHODS[number]



/* ============================= */
/* PAYMENT PROVIDER              */
/* ============================= */

export const PAYMENT_PROVIDERS = [
    "SUMUP",
    "STRIPE",
    "SQUARE",
    "ADYEN"
] as const

export type PaymentProvider = typeof PAYMENT_PROVIDERS[number]



/* ============================= */
/* PAYMENT ATTEMPT               */
/* ============================= */

export const PAYMENT_ATTEMPT_STATUSES = [
    "PENDING",
    "PAID",
    "FAILED",
    "CANCELLED"
] as const

export type PaymentAttemptStatus = typeof PAYMENT_ATTEMPT_STATUSES[number]



/* ============================= */
/* CASH SESSION                  */
/* ============================= */

export const CASH_SESSION_STATUSES = [
    "DRAFT",
    "OPEN",
    "CLOSED"
] as const

export type CashSessionStatus = typeof CASH_SESSION_STATUSES[number]

export const CASH_DRAWER_IMPACT_MODES = [
    "NONE",
    "INCREASE",
    "DECREASE"
] as const

export type CashDrawerImpactMode = typeof CASH_DRAWER_IMPACT_MODES[number]

export const CASH_SESSION_OPERATION_TYPES = [
    "OPENING",
    "OPENING_EDIT",
    "MANUAL_IN",
    "MANUAL_OUT",
    "DEPOSIT_REFUND",
    "CLOSING",
    "REOPEN",
] as const

export type CashSessionOperationType = typeof CASH_SESSION_OPERATION_TYPES[number]



/* ============================= */
/* DISCOUNT TYPE (PROMO)         */
/* ============================= */

export const DISCOUNT_TYPES = [
    "PERCENTAGE",
    "FIXED_AMOUNT",
    "FREE_PRODUCT"
] as const

export type DiscountType = typeof DISCOUNT_TYPES[number]



/* ============================= */
/* PRODUCT TYPE                  */
/* ============================= */

export const PRODUCT_TYPES = [
    "STANDARD",
    "FOOD"
] as const

export type ProductType = typeof PRODUCT_TYPES[number]

export const PRODUCT_CUSTOMIZATION_MODES = [
    "NONE",
    "RECIPE",
    "CONFIGURATOR",
] as const

export type ProductCustomizationMode = typeof PRODUCT_CUSTOMIZATION_MODES[number]

export const PRODUCT_OPTION_SELECTION_MODES = [
    "SINGLE",
    "MULTIPLE",
] as const

export type ProductOptionSelectionMode = typeof PRODUCT_OPTION_SELECTION_MODES[number]



/* ============================= */
/* CUSTOMIZATION ACTION          */
/* ============================= */

export const CUSTOMIZATION_ACTIONS = [
    "ADDED",
    "REMOVED"
] as const

export type CustomizationAction = typeof CUSTOMIZATION_ACTIONS[number]



/* ============================= */
/* STATION SOUND EVENT           */
/* ============================= */

/**
 * Événements auxquels on peut associer un son par station.
 *
 * Events PRODUCTION_* : pertinents pour les stations de type PRODUCTION
 * Events CASHIER_* : pertinents pour les stations de type CASH
 */
export const STATION_SOUND_EVENTS = [
    "PRODUCTION_NEW_ORDER",     // Nouvelle commande reçue de la caisse
    "PRODUCTION_ITEM_CANCELLED",// Article annulé par la caisse
    "CASHIER_ITEM_PREPARING",   // Article passé en préparation (PENDING→PREPARING)
    "CASHIER_ITEM_READY",       // Article prêt (PREPARING→READY)
    "CASHIER_ITEM_DELIVERED",   // Article livré (READY→DELIVERED)
] as const

export type StationSoundEvent = typeof STATION_SOUND_EVENTS[number]



/* ============================= */
/* RECIPE INGREDIENT ROLE        */
/* ============================= */

export const RECIPE_INGREDIENT_ROLES = [
    "BASE",
    "DEFAULT",
    "SUPPLEMENT"
] as const

export type RecipeIngredientRole = typeof RECIPE_INGREDIENT_ROLES[number]


