/**
 * Utilitaires de conversion d'unités (PX <-> MM)
 * A4: 595px = 210mm (largeur), 1123px = 297mm (hauteur)
 */

import { Element } from '../types/elements';

export const MM_TO_PX = 595 / 210; // ≈ 2.833
export const PX_TO_MM = 210 / 595; // ≈ 0.353

/**
 * Convertir millimètres en pixels
 */
export const mmToPx = (mm: number): number => Math.round(mm * MM_TO_PX);

/**
 * Convertir pixels en millimètres
 */
export const pxToMm = (px: number): number => Math.round(px * PX_TO_MM * 10) / 10; // Arrondir à 1 décimale

/**
 * Formater une valeur en MM avec unité
 */
export const formatMM = (value: number | null | undefined): string => {
  if (value === null || value === undefined) return '0 mm';
  return `${pxToMm(value)} mm`;
};

/**
 * Formater une valeur en MM avec 2 décimales
 */
export const formatMM2 = (value: number | null | undefined): string => {
  if (value === null || value === undefined) return '0.00 mm';
  const mm = pxToMm(value);
  return `${mm.toFixed(2)} mm`;
};

/**
 * Convertir une valeur MM entrée en pixels
 */
export const mmValueToPx = (mmValue: number): number => {
  return Math.round(mmValue * MM_TO_PX);
};

/**
 * Convertir tous les éléments de PX à MM
 */
export const convertElementsToMM = (elements: Element[]): Element[] => {
  return elements.map(element => ({
    ...element,
    x: pxToMm(element.x),
    y: pxToMm(element.y),
    width: pxToMm(element.width),
    height: pxToMm(element.height),
    _unitConverted: true
  }));
};



