{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://atelier-cv.fredthedev.com/schemas/resume.schema.json",
  "title": "Atelier CV — ResumeData",
  "description": "Format JSON officiel pour l'éditeur Atelier CV. Compatible import/export et assistants IA (Claude, ChatGPT). L'application normalise certaines valeurs legacy (ex. fontFamily sans/serif).",
  "type": "object",
  "additionalProperties": false,
  "required": ["metadata", "profile", "experiences", "education", "skills"],
  "properties": {
    "metadata": {
      "type": "object",
      "description": "Préférences d'affichage du CV (thème, langue, mise en page).",
      "additionalProperties": false,
      "required": [
        "template",
        "layout",
        "language",
        "primaryColor",
        "fontFamily",
        "lineHeight",
        "fontSize",
        "forceSinglePage"
      ],
      "properties": {
        "template": {
          "type": "string",
          "description": "Identifiant du modèle (ex. classic). Évoluera avec le système de templates."
        },
        "layout": {
          "type": "string",
          "enum": ["classic", "modern"],
          "description": "classic = une colonne ; modern = sidebar + contenu principal."
        },
        "language": {
          "type": "string",
          "enum": ["fr", "en"],
          "description": "Langue des libellés système du CV."
        },
        "primaryColor": {
          "type": "string",
          "description": "Couleur d'accent CSS (hex, ex. #3b82f6)."
        },
        "fontFamily": {
          "type": "string",
          "enum": ["modern", "elegant", "classic", "condensed", "writer"],
          "description": "Famille typographique du CV. Legacy accepté par l'app : sans → modern, serif → elegant."
        },
        "lineHeight": {
          "type": "number",
          "minimum": 1,
          "maximum": 2,
          "description": "Interligne du corps de texte (ex. 1.4)."
        },
        "fontSize": {
          "type": "string",
          "enum": ["small", "medium", "large"]
        },
        "forceSinglePage": {
          "type": "boolean",
          "description": "Active les modes de compression pour tenir sur une page."
        }
      }
    },
    "profile": {
      "type": "object",
      "description": "Identité et coordonnées du candidat.",
      "additionalProperties": false,
      "required": [
        "name",
        "title",
        "photoPositionX",
        "photoPositionY",
        "photoZoom",
        "email",
        "phone",
        "website",
        "location",
        "summary"
      ],
      "properties": {
        "name": { "type": "string" },
        "title": { "type": "string", "description": "Intitulé du poste visé." },
        "photo": {
          "type": "string",
          "description": "URL data ou lien image (optionnel)."
        },
        "photoPositionX": {
          "type": "number",
          "minimum": 0,
          "maximum": 100,
          "description": "Cadrage horizontal de la photo (0–100)."
        },
        "photoPositionY": {
          "type": "number",
          "minimum": 0,
          "maximum": 100,
          "description": "Cadrage vertical de la photo (0–100)."
        },
        "photoZoom": {
          "type": "number",
          "minimum": 1,
          "maximum": 2,
          "description": "Zoom sur la photo dans le cercle."
        },
        "email": { "type": "string", "format": "email" },
        "phone": { "type": "string" },
        "linkedin": { "type": "string" },
        "website": { "type": "string" },
        "location": { "type": "string", "description": "Ville, pays." },
        "summary": {
          "type": "string",
          "description": "Accroche / résumé professionnel (texte brut, pas de HTML)."
        }
      }
    },
    "experiences": {
      "type": "array",
      "description": "Expériences professionnelles, ordre = affichage.",
      "items": { "$ref": "#/$defs/experience" },
      "minItems": 1
    },
    "education": {
      "type": "array",
      "items": { "$ref": "#/$defs/education" },
      "minItems": 1
    },
    "skills": {
      "type": "array",
      "description": "Liste de compétences (chaînes simples).",
      "items": { "type": "string" },
      "minItems": 1
    },
    "certifications": {
      "type": "array",
      "items": { "$ref": "#/$defs/certification" }
    },
    "languages": {
      "type": "array",
      "items": { "$ref": "#/$defs/language" }
    },
    "interests": {
      "type": "array",
      "items": { "type": "string" }
    },
    "references": {
      "type": "array",
      "items": { "$ref": "#/$defs/reference" }
    }
  },
  "$defs": {
    "experience": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "id",
        "company",
        "position",
        "location",
        "startDate",
        "endDate",
        "description"
      ],
      "properties": {
        "id": { "type": "string", "description": "Identifiant stable (ex. exp-1)." },
        "company": { "type": "string" },
        "position": { "type": "string" },
        "location": { "type": "string" },
        "startDate": {
          "type": "string",
          "description": "Texte libre (ex. Janvier 2021)."
        },
        "endDate": {
          "type": "string",
          "description": "Texte libre ou Present."
        },
        "description": {
          "type": "array",
          "items": { "type": "string" },
          "description": "Puces : une phrase par élément."
        }
      }
    },
    "education": {
      "type": "object",
      "additionalProperties": false,
      "required": ["id", "school", "degree", "date"],
      "properties": {
        "id": { "type": "string" },
        "school": { "type": "string" },
        "degree": { "type": "string" },
        "date": { "type": "string" }
      }
    },
    "certification": {
      "type": "object",
      "additionalProperties": false,
      "required": ["id", "name", "issuer", "date"],
      "properties": {
        "id": { "type": "string" },
        "name": { "type": "string" },
        "issuer": { "type": "string" },
        "date": { "type": "string" }
      }
    },
    "language": {
      "type": "object",
      "additionalProperties": false,
      "required": ["name", "level"],
      "properties": {
        "name": { "type": "string" },
        "level": { "type": "string", "description": "ex. Courant, B2, Natif" }
      }
    },
    "reference": {
      "type": "object",
      "additionalProperties": false,
      "required": ["id", "name", "position", "company", "contact"],
      "properties": {
        "id": { "type": "string" },
        "name": { "type": "string" },
        "position": { "type": "string" },
        "company": { "type": "string" },
        "contact": { "type": "string" }
      }
    }
  }
}
