/**
 * Configuration des opérations SPC pour la modal-execute
 */

export interface SpcOperationConfig {
  type: string;
  hasCommandInput: boolean;
  hasPrefix: boolean;
  prefix?: string;
  title: string;
  icon: string;
  placeholder: string;
  helpText: string;
  requiresFrom: boolean;
  from?: string;
  requiresUuid: boolean;
  isOptional?: boolean;
  inputFieldMaxLength?: number;
  confirmButtonText?: string;
}

export const SPC_OPERATIONS: Record<string, SpcOperationConfig> = {
  office_id: {
    type: 'office_id',
    hasCommandInput: false, // Pas de command_user, office_id récupéré du compte
    hasPrefix: false,
    title: 'Vérifier Office ID',
    icon: 'fas fa-shield-alt',
    placeholder: '',
    helpText: 'Office ID récupéré automatiquement depuis le compte',
    requiresFrom: true,
    from: 'accounts',
    requiresUuid: true,
    isOptional: true, // Pas de saisie requise
    inputFieldMaxLength: 0,
    confirmButtonText: 'Vérifier'
  },

  load_pnr: {
    type: 'load_pnr',
    hasCommandInput: true,
    hasPrefix: false,
    title: 'Charger un PNR',
    icon: 'fas fa-download',
    placeholder: 'ex. ZYBDFG',
    helpText: 'Code PNR à charger dans le système',
    requiresFrom: false,
    requiresUuid: false,
    inputFieldMaxLength: 10,
    confirmButtonText: 'Charger'
  },

  issue_pnr: {
    type: 'issue_pnr',
    hasCommandInput: true,
    hasPrefix: true,
    prefix: 'TTP/',
    title: 'Émettre PNR',
    icon: 'fas fa-paper-plane',
    placeholder: 'P1/S1-3',
    helpText: 'Format: Pn/Sx-y (Pn = passager, Sx-y = segments). Laisser vide pour émettre tout le PNR',
    requiresFrom: true,
    from: 'pnr',
    requiresUuid: true,
    isOptional: true,
    inputFieldMaxLength: 30,
    confirmButtonText: 'Émettre'
  },

  void_ticket: {
    type: 'void_ticket',
    hasCommandInput: false,
    hasPrefix: false,
    title: 'Annuler Ticket (VOID)',
    icon: 'fas fa-ban',
    placeholder: '',
    helpText: 'Annulation immédiate du ticket émis aujourd\'hui',
    requiresFrom: true,
    from: 'etatsdeventes',
    requiresUuid: true,
    confirmButtonText: 'Annuler'
  },

  refund_ticket: {
    type: 'refund_ticket',
    hasCommandInput: false,
    hasPrefix: false,
    title: 'Demander Remboursement',
    icon: 'fas fa-undo',
    placeholder: '',
    helpText: 'Création d\'une requête de remboursement pour ticket émis en date passée',
    requiresFrom: true,
    from: 'etatsdeventes',
    requiresUuid: true,
    confirmButtonText: 'Demander'
  },

  link: {
    type: 'link',
    hasCommandInput: true,
    hasPrefix: true,
    prefix: 'FHE',
    title: 'Associer Billet à PNR',
    icon: 'fas fa-link',
    placeholder: '157-2986624587',
    helpText: 'Numéro de billet à associer au PNR (format: 157-XXXXXXXXX)',
    requiresFrom: true,
    from: 'pnr',
    requiresUuid: true,
    inputFieldMaxLength: 25,
    confirmButtonText: 'Associer'
  },

  pricing: {
    type: 'pricing',
    hasCommandInput: true,
    hasPrefix: true,
    prefix: 'FXO/',
    title: 'Tarifer Segments',
    icon: 'fas fa-calculator',
    placeholder: 'S2-3/2986624587',
    helpText: 'Segments à tarifer avec référence billet (format: Sx-y/XXXXXXXXX). Laisser vide pour tarifer tous les segments',
    requiresFrom: true,
    from: 'pnr',
    requiresUuid: true,
    isOptional: true,
    inputFieldMaxLength: 30,
    confirmButtonText: 'Tarifer'
  },

  confirm_pricing: {
    type: 'confirm_pricing',
    hasCommandInput: true,
    hasPrefix: true,
    prefix: 'FXQ/',
    title: 'Confirmer Tarif',
    icon: 'fas fa-check-circle',
    placeholder: 'S2-3/2986624587',
    helpText: 'TST à confirmer (format: Sx-y/XXXXXXXXX). Laisser vide pour confirmer toutes les simulations',
    requiresFrom: true,
    from: 'pnr',
    requiresUuid: true,
    isOptional: true,
    inputFieldMaxLength: 30,
    confirmButtonText: 'Confirmer'
  }
};

/**
 * Helper pour créer la configuration de la modal-execute pour une opération SPC
 */
export function createSpcModalConfig(
  operationType: string,
  records: any[] = [],
  moduleName: string,
  uuid?: string
): any {
  const config = SPC_OPERATIONS[operationType];

  if (!config) {
    throw new Error(`Opération SPC inconnue: ${operationType}`);
  }

  return {
    // Propriétés existantes de la modal
    records,
    count: records.length,
    moduleName,
    title: config.title,
    message: getOperationMessage(config, records.length),
    confirmButtonText: config.confirmButtonText,
    requiresConfirmation: true,
    showInputField: config.hasCommandInput,
    inputFieldLabel: `Commande ${config.title}`,
    inputFieldPlaceholder: config.placeholder,
    inputFieldMaxLength: config.inputFieldMaxLength || 50,
    inputFieldRequired: !config.isOptional,
    action: 'spc_execute',

    // Nouvelles propriétés SPC
    operationType: config.type,
    hasPrefix: config.hasPrefix,
    prefix: config.prefix,
    from: config.requiresFrom ? config.from : undefined,
    uuid: config.requiresUuid ? uuid : undefined,
    icon: config.icon,
    helpText: config.helpText,
    isOptional: config.isOptional || false
  };
}

/**
 * Génère le message approprié selon l'opération et le nombre d'éléments
 */
function getOperationMessage(config: SpcOperationConfig, count: number): string {
  const baseMessages: Record<string, string> = {
    office_id: 'Vérifier la validité de l\'Office ID de cette agence.',
    load_pnr: 'Charger ce PNR dans le système ESTAIR CONNECT.',
    issue_pnr: count > 1
      ? `Émettre ${count} PNR sélectionnés. Les validations TST, forme de paiement et fonds seront vérifiées.`
      : 'Émettre ce PNR. Les validations TST, forme de paiement et fonds seront vérifiées.',
    void_ticket: count > 1
      ? `Annuler ${count} tickets émis aujourd'hui.`
      : 'Annuler ce ticket émis aujourd\'hui.',
    refund_ticket: count > 1
      ? `Créer ${count} requêtes de remboursement.`
      : 'Créer une requête de remboursement pour ce ticket.',
    link: count > 1
      ? `Associer ${count} billets aux PNR correspondants.`
      : 'Associer ce billet au PNR.',
    pricing: count > 1
      ? `Tarifer les segments de ${count} PNR.`
      : 'Tarifer les segments de ce PNR.',
    confirm_pricing: count > 1
      ? `Confirmer les tarifs de ${count} PNR.`
      : 'Confirmer le tarif de ce PNR.'
  };

  return baseMessages[config.type] || `Exécuter l'opération ${config.title}.`;
}