/**
 * Modèles des annotations posées sur la couche d'édition.
 *
 * Toutes les coordonnées (x, y, w, h) sont exprimées en POURCENTAGE [0..1]
 * de la taille de la page rendue. Cela rend les annotations indépendantes du
 * zoom : on les stocke en relatif et on les convertit en pixels (pour
 * l'affichage) ou en points PDF (pour l'export pdf-lib) au moment voulu.
 */

export type TypeAnnotation =
  | 'texte'
  | 'image'
  | 'signature'
  | 'rectangle'
  | 'cercle'
  | 'ligne'
  | 'fleche'
  | 'croix'
  | 'lien';

export interface AnnotationBase {
  id: string;
  type: TypeAnnotation;
  page: number; // index de page (0-based)
  x: number; // coin haut-gauche, en fraction de la largeur
  y: number; // coin haut-gauche, en fraction de la hauteur
  w: number; // largeur en fraction
  h: number; // hauteur en fraction
}

export interface AnnotationTexte extends AnnotationBase {
  type: 'texte';
  texte: string;
  taillePolice: number; // en pixels à 100% de zoom
  couleur: string; // #rrggbb
}

export interface AnnotationImage extends AnnotationBase {
  type: 'image' | 'signature';
  /** Image encodée en data URL (png/jpeg). */
  dataUrl: string;
}

export interface AnnotationForme extends AnnotationBase {
  type: 'rectangle' | 'cercle' | 'ligne' | 'fleche' | 'croix';
  couleur: string; // trait
  epaisseur: number; // en pixels à 100%
  remplissage?: string | null; // couleur de fond (rect/cercle), sinon null
}

export interface AnnotationLien extends AnnotationBase {
  type: 'lien';
  url: string;
}

export type Annotation =
  | AnnotationTexte
  | AnnotationImage
  | AnnotationForme
  | AnnotationLien;

/** Outils sélectionnables dans la barre d'outils de l'éditeur. */
export type Outil =
  | 'selection'
  | 'texte'
  | 'image'
  | 'signature'
  | 'rectangle'
  | 'cercle'
  | 'ligne'
  | 'fleche'
  | 'croix'
  | 'lien';

/** Liste des outils « forme » regroupés dans le menu déroulant de la barre d'outils. */
export const FORMES: { outil: Outil; icone: string; libelle: string }[] = [
  { outil: 'rectangle', icone: '▭', libelle: 'Rectangle' },
  { outil: 'cercle', icone: '◯', libelle: 'Cercle' },
  { outil: 'ligne', icone: '／', libelle: 'Ligne' },
  { outil: 'fleche', icone: '➚', libelle: 'Flèche' },
  { outil: 'croix', icone: '✕', libelle: 'Croix' },
];
