/**
 * Types pour la gestion des stocks
 */

export enum StatutStock {
  ACTIF = 'ACTIF',
  INACTIF = 'INACTIF',
  OBSOLETE = 'OBSOLETE',
  SUPPRIME = 'SUPPRIME',
  EN_COMMANDE = 'EN_COMMANDE',
  EN_TRANSIT = 'EN_TRANSIT',
  EN_CONTROLE = 'EN_CONTROLE',
  QUARANTAINE = 'QUARANTAINE',
  DEFECTUEUX = 'DEFECTUEUX',
  PERDU = 'PERDU',
  RESERVE = 'RESERVE',
  EN_REPARATION = 'EN_REPARATION'
}

export enum CategorieStock {
  MATERIAUX_CONSTRUCTION = 'MATERIAUX_CONSTRUCTION',
  OUTILLAGE = 'OUTILLAGE',
  QUINCAILLERIE = 'QUINCAILLERIE',
  EQUIPEMENTS_SECURITE = 'EQUIPEMENTS_SECURITE',
  EQUIPEMENTS_TECHNIQUES = 'EQUIPEMENTS_TECHNIQUES',
  CONSOMMABLES = 'CONSOMMABLES',
  VEHICULES_ENGINS = 'VEHICULES_ENGINS',
  FOURNITURES_BUREAU = 'FOURNITURES_BUREAU',
  PRODUITS_CHIMIQUES = 'PRODUITS_CHIMIQUES',
  PIECES_DETACHEES = 'PIECES_DETACHEES',
  EQUIPEMENTS_MESURE = 'EQUIPEMENTS_MESURE',
  MOBILIER = 'MOBILIER',
  AUTRE = 'AUTRE'
}

export interface Stock {
  id: string;
  nom: string;
  description?: string;
  quantite: number;
  quantiteMin: number;
  quantiteMax: number;
  quantiteStock: number;
  quantiteReservee?: number;
  quantiteMinimum?: number;
  unite: string;
  prixUnitaire: number;
  coutMoyenPondere?: number;
  dateCreation: string;
  dateModification: string;
  actif: boolean;
  statut: StatutStock;
  categorie: CategorieStock;
  codeZone?: string;
  codeAllee?: string;
  codeEtagere?: string;
  emplacementStockage?: string;
  datePeremption?: string;
  articleDangereux?: boolean;
  coutDerniereEntree?: number;
  fournisseur?: {
    id: string;
    nom: string;
  };
}

export interface StockMovement {
  id: string;
  type: 'ENTREE' | 'SORTIE';
  quantite: number;
  dateMovement: string;
  motif: string;
  utilisateur: string;
  chantier?: {
    id: string;
    nom: string;
  };
}

export interface StockAlert {
  id: string;
  type: 'STOCK_BAS' | 'STOCK_CRITIQUE' | 'PEREMPTION';
  message: string;
  dateCreation: string;
  traite: boolean;
}

export interface StockStats {
  totalArticles: number;
  valeurTotale: number;
  articlesEnRupture: number;
  articlesEnAlerte: number;
}