// eslint-disable-next-line @typescript-eslint/no-unused-vars
import { KPI, CategoryData } from '../types';

export const kpiData: CategoryData = {
  security: [
    {
      id: 'tf',
      name: 'Taux de Fréquence',
      value: 0.5,
      unit: 'par 1M heures',
      category: 'security',
      target: 1.0,
      status: 'good',
      trend: 'down',
      description: 'Mesurer la fréquence des accidents avec arrêt.',
      formula: '(Nombre d\'Accidents avec Arrêt / Nombre d\'Heures Travaillées) × 1000000',
      data: [1.2, 0.9, 0.7, 0.5],
      labels: ['Semaine 1', 'Semaine 2', 'Semaine 3', 'Semaine 4']
    },
    {
      id: 'incidents',
      name: 'Incidents/Near Miss',
      value: 12,
      unit: 'incidents',
      category: 'security',
      target: 8,
      status: 'warning',
      trend: 'up',
      description: 'Évaluer la culture de sécurité et la proactivité.',
      formula: 'Compte des rapports d\'incidents (sans blessure/dommage)',
      data: [8, 10, 11, 12],
      labels: ['Semaine 1', 'Semaine 2', 'Semaine 3', 'Semaine 4']
    },
    {
      id: 'audit_compliance',
      name: 'Conformité Audits',
      value: 96,
      unit: '%',
      category: 'security',
      target: 95,
      status: 'good',
      trend: 'up',
      description: 'Mesurer le respect des procédures de sécurité.',
      formula: '(Points de Contrôle Conformes / Total Points de Contrôle) × 100',
      data: [93, 94, 95, 96],
      labels: ['Semaine 1', 'Semaine 2', 'Semaine 3', 'Semaine 4']
    }
  ],
  quality: [
    {
      id: 'scrap_rate',
      name: 'Taux de Rebut',
      value: 2.1,
      unit: '%',
      category: 'quality',
      target: 1.5,
      status: 'warning',
      trend: 'down',
      description: 'Mesurer le pourcentage d\'unités jetées (irréparables).',
      formula: '(Nombre d\'Unités Rebutées / Nombre Total d\'Unités Produites) × 100',
      data: [3.2, 2.8, 2.4, 2.1],
      labels: ['Semaine 1', 'Semaine 2', 'Semaine 3', 'Semaine 4']
    },
    {
      id: 'rework_rate',
      name: 'Taux de Retouche',
      value: 3.8,
      unit: '%',
      category: 'quality',
      target: 2.0,
      status: 'warning',
      trend: 'down',
      description: 'Mesurer le pourcentage d\'unités nécessitant une reprise.',
      formula: '(Nombre d\'Unités Retouchées / Nombre Total d\'Unités Produites) × 100',
      data: [5.2, 4.6, 4.2, 3.8],
      labels: ['Semaine 1', 'Semaine 2', 'Semaine 3', 'Semaine 4']
    },
    {
      id: 'dpu',
      name: 'Défauts par Unité (DPU)',
      value: 0.45,
      unit: 'défauts/unité',
      category: 'quality',
      target: 0.5,
      status: 'good',
      trend: 'down',
      description: 'Mesurer le nombre moyen de défauts par produit.',
      formula: 'Nombre Total de Défauts Trouvés / Nombre Total d\'Unités Inspectées',
      data: [0.68, 0.58, 0.52, 0.45],
      labels: ['Semaine 1', 'Semaine 2', 'Semaine 3', 'Semaine 4']
    },
    {
      id: 'return_rate',
      name: 'Taux de Retours Clients',
      value: 1.2,
      unit: '%',
      category: 'quality',
      target: 0.8,
      status: 'good',
      trend: 'down',
      description: 'Mesurer l\'impact de la non-qualité chez le client.',
      formula: '(Nombre d\'Unités Retournées / Nombre Total d\'Unités Vendues) × 100',
      data: [2.1, 1.8, 1.5, 1.2],
      labels: ['Semaine 1', 'Semaine 2', 'Semaine 3', 'Semaine 4']
    },
    {
      id: 'trs',
      name: 'TRS (Rendement Synthétique)',
      value: 78.5,
      unit: '%',
      category: 'quality',
      target: 85,
      status: 'warning',
      trend: 'up',
      description: 'Rendement global de la ligne de production.',
      formula: 'Nb pièces bonnes × Temps cycle / Temps d\'ouverture',
      data: [75.2, 76.5, 77.8, 78.5],
      labels: ['Semaine 1', 'Semaine 2', 'Semaine 3', 'Semaine 4']
    },
    {
      id: 'oee',
      name: 'OEE (Overall Equipment Effectiveness)',
      value: 72.3,
      unit: '%',
      category: 'quality',
      target: 80,
      status: 'warning',
      trend: 'up',
      description: 'Efficacité combinée (Disponibilité, Performance, Qualité).',
      formula: 'Disponibilité × Performance × Qualité',
      data: [68.5, 70.2, 71.5, 72.3],
      labels: ['Semaine 1', 'Semaine 2', 'Semaine 3', 'Semaine 4']
    }
  ],
  delays: [
    {
      id: 'schedule_adherence',
      name: 'Respect du Plan',
      value: 98,
      unit: '%',
      category: 'delays',
      target: 95,
      status: 'good',
      trend: 'up',
      description: 'Mesurer la capacité à atteindre le volume planifié.',
      formula: '(Quantité Réellement Produite / Quantité Planifiée) × 100',
      data: [96.5, 97.2, 97.6, 98.0],
      labels: ['Semaine 1', 'Semaine 2', 'Semaine 3', 'Semaine 4']
    },
    {
      id: 'cycle_time',
      name: 'Temps de Cycle',
      value: 45,
      unit: 'min/unité',
      category: 'delays',
      target: 50,
      status: 'good',
      trend: 'down',
      description: 'Mesurer le temps nécessaire pour assembler une unité.',
      formula: 'Temps Total de Production / Nombre Total d\'Unités Produites',
      data: [52, 49, 47, 45],
      labels: ['Semaine 1', 'Semaine 2', 'Semaine 3', 'Semaine 4']
    },
    {
      id: 'tack_time',
      name: 'Tack Time',
      value: 50,
      unit: 'min/unité',
      category: 'delays',
      target: 50,
      status: 'good',
      trend: 'stable',
      description: 'Temps de production requis par unité demandée.',
      formula: 'Temps de production / Nombre de pièces demandées',
      data: [50, 50, 50, 50],
      labels: ['Semaine 1', 'Semaine 2', 'Semaine 3', 'Semaine 4']
    },
    {
      id: 'downtime',
      name: 'Temps d\'Arrêt Imprévu',
      value: 2.5,
      unit: 'h/jour',
      category: 'delays',
      target: 1.5,
      status: 'warning',
      trend: 'up',
      description: 'Mesurer le temps d\'arrêt non planifié de la ligne.',
      formula: 'Somme des Périodes d\'Arrêt Non Planifié',
      data: [1.8, 2.1, 2.3, 2.5],
      labels: ['Semaine 1', 'Semaine 2', 'Semaine 3', 'Semaine 4']
    }
  ],
  costs: [
    {
      id: 'cpu',
      name: 'Coût par Unité',
      value: 245,
      unit: '€',
      category: 'costs',
      target: 240,
      status: 'good',
      trend: 'down',
      description: 'Mesurer l\'efficacité des coûts de production.',
      formula: 'Coût Total de Production / Nombre Total d\'Unités Produites',
      data: [258, 252, 248, 245],
      labels: ['Semaine 1', 'Semaine 2', 'Semaine 3', 'Semaine 4']
    },
    {
      id: 'labor_productivity',
      name: 'Productivité MOD',
      value: 8.2,
      unit: 'unités/h',
      category: 'costs',
      target: 8.0,
      status: 'good',
      trend: 'up',
      description: 'Mesurer l\'efficacité de l\'équipe d\'assemblage.',
      formula: 'Nombre d\'Unités Produites / Total Heures Main-d\'œuvre Directe',
      data: [7.8, 8.0, 8.1, 8.2],
      labels: ['Semaine 1', 'Semaine 2', 'Semaine 3', 'Semaine 4']
    },
    {
      id: 'cnq',
      name: 'Coût des Non-Qualité',
      value: 18500,
      unit: '€',
      category: 'costs',
      target: 10000,
      status: 'critical',
      trend: 'up',
      description: 'Mesurer le coût des défauts (retouche, rebut, retours).',
      formula: 'Coût des Rebuts + Coût des Retouches + Retours clients',
      data: [15200, 16800, 17800, 18500],
      labels: ['Semaine 1', 'Semaine 2', 'Semaine 3', 'Semaine 4']
    }
  ],
  maintenance: [
    {
      id: 'mtbf',
      name: 'MTBF (Temps Moyen Entre Pannes)',
      value: 450,
      unit: 'heures',
      category: 'maintenance',
      target: 400,
      status: 'good',
      trend: 'up',
      description: 'Mesurer la fiabilité des équipements.',
      formula: 'Temps Total de Fonctionnement / Nombre Total de Pannes',
      data: [380, 400, 425, 450],
      labels: ['Semaine 1', 'Semaine 2', 'Semaine 3', 'Semaine 4']
    },
    {
      id: 'mttr',
      name: 'MTTR (Temps Moyen de Réparation)',
      value: 2.1,
      unit: 'heures',
      category: 'maintenance',
      target: 2.5,
      status: 'good',
      trend: 'down',
      description: 'Mesurer la rapidité des interventions de maintenance.',
      formula: 'Temps Total de Réparation / Nombre Total de Pannes',
      data: [2.8, 2.5, 2.3, 2.1],
      labels: ['Semaine 1', 'Semaine 2', 'Semaine 3', 'Semaine 4']
    },
    {
      id: 'pm_cm_ratio',
      name: 'Ratio Maintenance Préventive/Corrective',
      value: 65,
      unit: '%',
      category: 'maintenance',
      target: 70,
      status: 'good',
      trend: 'up',
      description: 'Évaluer la stratégie de maintenance (proactif vs réactif).',
      formula: 'Heures MP / (Heures MP + Heures MC)',
      data: [58, 61, 63, 65],
      labels: ['Semaine 1', 'Semaine 2', 'Semaine 3', 'Semaine 4']
    },
    {
      id: 'preventive_plan',
      name: 'Achèvement Plan Préventif',
      value: 92,
      unit: '%',
      category: 'maintenance',
      target: 95,
      status: 'good',
      trend: 'stable',
      description: 'Mesurer le respect des programmes d\'entretien.',
      formula: '(Tâches MP Terminées / Tâches MP Planifiées) × 100',
      data: [92, 92, 92, 92],
      labels: ['Semaine 1', 'Semaine 2', 'Semaine 3', 'Semaine 4']
    },
    {
      id: 'maintenance_cost_per_unit',
      name: 'Coût Maintenance/Unité',
      value: 28,
      unit: '€',
      category: 'maintenance',
      target: 30,
      status: 'good',
      trend: 'down',
      description: 'Relier les dépenses de maintenance à la production.',
      formula: 'Coûts Totaux de Maintenance / Nombre Total d\'Unités Produites',
      data: [32, 30, 29, 28],
      labels: ['Semaine 1', 'Semaine 2', 'Semaine 3', 'Semaine 4']
    }
  ]
};

export const getCategoryColor = (category: string): string => {
  const colors: Record<string, string> = {
    security: '#e74c3c',
    quality: '#3498db',
    delays: '#f39c12',
    costs: '#27ae60',
    maintenance: '#9b59b6'
  };
  return colors[category] || '#95a5a6';
};

export const getCategoryName = (category: string): string => {
  const names: Record<string, string> = {
    security: 'Sécurité',
    quality: 'Qualité',
    delays: 'Délais & Livraison',
    costs: 'Coûts',
    maintenance: 'Maintenance'
  };
  return names[category] || category;
};

export const getCategoryEmoji = (category: string): string => {
  const emojis: Record<string, string> = {
    security: '🛡️',
    quality: '🎯',
    delays: '⏱️',
    costs: '💰',
    maintenance: '🔧'
  };
  return emojis[category] || '📊';
};
