import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';

export const appConfig: ApplicationConfig = {
  providers: [
    provideZoneChangeDetection({ eventCoalescing: true }),

  ]
};
export const APP_CONFIG = {

  app: {
    name: 'AIT',
    version: '1.0.0',
    defaultLanguage: 'fr',
  },


  password: {
    minLength: 4,
    maxLength: 50,
    requireUppercase: false,
    requireLowercase: false,
    requireNumbers: false,
    requireSpecialChars: false,
  },


  email: {
    minLength: 5,
    maxLength: 254,
  },


  user: {
    username: {
      minLength: 1,
      maxLength: 50,
      pattern: /^[a-zA-Z0-9!$&*+=?^_`{|}~.-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$|^[_.@A-Za-z0-9-]+$/, // Email ou username
    },
    firstName: {
      minLength: 1,
      maxLength: 50,
    },
    lastName: {
      minLength: 1,
      maxLength: 50,
    },
  },

  messages: {
    defaultErrorMessage: 'Une erreur est survenue. Veuillez réessayer.',
    defaultSuccessMessage: 'Opération effectuée avec succès.',
  },

  pagination: {
    defaultPageSize: 20,
    pageSizeOptions: [10, 20, 50, 100],
  },
  files: {
    maxUploadSizeMB: 10,
    allowedImageTypes: ['image/jpeg', 'image/png', 'image/gif', 'image/webp'],
    allowedDocumentTypes: ['application/pdf', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'],
  },
} as const;


export type AppConfig = typeof APP_CONFIG;


export const VALIDATION_MESSAGES = {
  password: {
    required: 'Le mot de passe est obligatoire.',
    minLength: `Le mot de passe doit contenir au moins ${APP_CONFIG.password.minLength} caractères.`,
    maxLength: `Le mot de passe ne peut pas dépasser ${APP_CONFIG.password.maxLength} caractères.`,
    mismatch: 'Les mots de passe ne correspondent pas.',
  },
  email: {
    required: "L'adresse e-mail est obligatoire.",
    invalid: 'Veuillez entrer une adresse e-mail valide.',
    minLength: `L'adresse e-mail doit contenir au moins ${APP_CONFIG.email.minLength} caractères.`,
    maxLength: `L'adresse e-mail ne peut pas dépasser ${APP_CONFIG.email.maxLength} caractères.`,
  },
  username: {
    required: "Le nom d'utilisateur est obligatoire.",
    minLength: `Le nom d'utilisateur doit contenir au moins ${APP_CONFIG.user.username.minLength} caractères.`,
    maxLength: `Le nom d'utilisateur ne peut pas dépasser ${APP_CONFIG.user.username.maxLength} caractères.`,
    pattern: "Le nom d'utilisateur ne peut contenir que des lettres, chiffres, tirets et underscores.",
  },
  firstName: {
    required: 'Le prénom est obligatoire.',
    minLength: `Le prénom doit contenir au moins ${APP_CONFIG.user.firstName.minLength} caractère.`,
    maxLength: `Le prénom ne peut pas dépasser ${APP_CONFIG.user.firstName.maxLength} caractères.`,
  },
  lastName: {
    required: 'Le nom est obligatoire.',
    minLength: `Le nom doit contenir au moins ${APP_CONFIG.user.lastName.minLength} caractère.`,
    maxLength: `Le nom ne peut pas dépasser ${APP_CONFIG.user.lastName.maxLength} caractères.`,
  },
} as const;
