<commit_before><?php

class ProduitCsvFile extends CsvFile {

    const CSV_PRODUIT_INTERPRO = 0;
    const CSV_PRODUIT_CATEGORIE_LIBELLE = 1;    //CATEGORIE == CERTIFICATION
    const CSV_PRODUIT_CATEGORIE_CODE = 2;       //CATEGORIE == CERTIFICATION
    const CSV_PRODUIT_CATEGORIE_CODE_APPLICATIF_DROIT = 'C';
    const CSV_PRODUIT_GENRE_LIBELLE = 3;
    const CSV_PRODUIT_GENRE_CODE = 4;
    const CSV_PRODUIT_GENRE_CODE_APPLICATIF_DROIT = 'G';
    const CSV_PRODUIT_DENOMINATION_LIBELLE = 5; //DENOMINATION == APPELLATION
    const CSV_PRODUIT_DENOMINATION_CODE = 6;    //DENOMINATION == APPELLATION
    const CSV_PRODUIT_DENOMINATION_CODE_APPLICATIF_DROIT = 'A';
    const CSV_PRODUIT_MENTION_LIBELLE = 7;
    const CSV_PRODUIT_MENTION_CODE = 8;
    const CSV_PRODUIT_MENTION_CODE_APPLICATIF_DROIT = 'M';
    const CSV_PRODUIT_LIEU_LIBELLE = 9;
    const CSV_PRODUIT_LIEU_CODE = 10;
    const CSV_PRODUIT_LIEU_CODE_APPLICATIF_DROIT = 'L';
    const CSV_PRODUIT_COULEUR_LIBELLE = 11;
    const CSV_PRODUIT_COULEUR_CODE = 12;
    const CSV_PRODUIT_COULEUR_CODE_APPLICATIF_DROIT = 'CO';
    const CSV_PRODUIT_CEPAGE_LIBELLE = 13;
    const CSV_PRODUIT_CEPAGE_CODE = 14;
    const CSV_PRODUIT_CEPAGE_CODE_APPLICATIF_DROIT = 'CE';
    const CSV_PRODUIT_DEPARTEMENTS = 15;
    const CSV_PRODUIT_DOUANE_CODE = 16;
    const CSV_PRODUIT_DOUANE_LIBELLE = 17;
    const CSV_PRODUIT_DOUANE_TAXE = 18;
    const CSV_PRODUIT_DOUANE_DATE = 19;
    const CSV_PRODUIT_DOUANE_NOEUD = 20; //a *_DROIT value previously defined
    const CSV_PRODUIT_CVO_TAXE = 21;
    const CSV_PRODUIT_CVO_DATE = 22;
    const CSV_PRODUIT_CVO_NOEUD = 23; //a _DROIT value previously defined
    const CSV_PRODUIT_REPLI_ENTREE = 24;
    const CSV_PRODUIT_REPLI_SORTI = 25;
    const CSV_PRODUIT_DECLASSEMENT_ENTREE = 26;
    const CSV_PRODUIT_DECLASSEMENT_SORTI = 27;
    const CSV_PRODUIT_DENSITE = 28;
    const CSV_PRODUIT_LABELS = 29;
    const CSV_PRODUIT_CODE_PRODUIT = 30;
    const CSV_PRODUIT_CODE_PRODUIT_NOEUD = 31;
    const CSV_PRODUIT_CODE_COMPTABLE = 32;
    const CSV_PRODUIT_CODE_COMPTABLE_NOEUD = 33;
    const CSV_PRODUIT_CODE_DOUANE = 34;
    const CSV_PRODUIT_CODE_DOUANE_NOEUD = 35;
    const CSV_PRODUIT_ALIAS_PRODUIT = 36;
    const CSV_PRODUIT_FORMAT_LIBELLE = 37;
    const CSV_PRODUIT_FORMAT_LIBELLE_NOEUD = 38;
    const CSV_PRODUIT_CEPAGES_AUTORISES = 39;

    protected $config;
    protected $errors;

    public function __construct($config, $file) {
        parent::__construct($file);
        $this->config = $config;
    }

    private function getProduit($hash) {
        return $this->config->declaration->getOrAdd($hash);
    }

    private function getNewHash($line) {
        return 'certifications/' . $this->getKeyProduit($line[self::CSV_PRODUIT_CATEGORIE_CODE], true) .
                '/genres/' . $this->getKeyProduit($line[self::CSV_PRODUIT_GENRE_CODE], true, true) .
                '/appellations/' . $this->getKeyProduit($line[self::CSV_PRODUIT_DENOMINATION_CODE], true, true) .
                '/mentions/' . $this->getKeyProduit($line[self::CSV_PRODUIT_MENTION_CODE], true, true) .
                '/lieux/' . $this->getKeyProduit($line[self::CSV_PRODUIT_LIEU_CODE], true, true) .
                '/couleurs/' . $this->getKeyProduit($line[self::CSV_PRODUIT_COULEUR_CODE], true, true) .
                '/cepages/' . $this->getKeyProduit($line[self::CSV_PRODUIT_CEPAGE_CODE], true, true);
    }

    private function getOldHash($line) {
        return 'certifications/' . $this->getKeyProduit($line[self::CSV_PRODUIT_CATEGORIE_CODE], false) .
                '/genres/' . $this->getKeyProduit($line[self::CSV_PRODUIT_GENRE_CODE], false, true) .
                '/appellations/' . $this->getKeyProduit($line[self::CSV_PRODUIT_DENOMINATION_CODE], false, true) .
                '/mentions/' . $this->getKeyProduit($line[self::CSV_PRODUIT_MENTION_CODE], false, true) .
                '/lieux/' . $this->getKeyProduit($line[self::CSV_PRODUIT_LIEU_CODE], false, true) .
                '/couleurs/' . $this->getKeyProduit($line[self::CSV_PRODUIT_COULEUR_CODE], false, true).
                '/cepages/' . $this->getKeyProduit($line[self::CSV_PRODUIT_CEPAGE_CODE], false, true);
    }

    private function couleurKeyToCode($key) {
        $correspondances = array(1 => "rouge",
            2 => "rose",
            3 => "blanc");

        if (!isset($correspondances[$key])) {

            return $key;
        }

        return $correspondances[$key];
    }

    private function getKeyProduit($key, $new = true, $withDefault = false) {
        $keyProduit = split('/', $key);
        if (count($keyProduit) != 2) {
            return $this->getKey($keyProduit[0], $withDefault);
        } else {
            if ($new) {
                return $this->getKey($keyProduit[0], $withDefault);
            } else {
                return $this->getKey($keyProduit[1], $withDefault);
            }
        }
    }

    private function getKey($key, $withDefault = false) {
        if ($withDefault) {<commit_msg>gestion des clés lieux numérique sur 2 chiffres a l'import de la conf<commit_after><?php

class ProduitCsvFile extends CsvFile {

    const CSV_PRODUIT_INTERPRO = 0;
    const CSV_PRODUIT_CATEGORIE_LIBELLE = 1;    //CATEGORIE == CERTIFICATION
    const CSV_PRODUIT_CATEGORIE_CODE = 2;       //CATEGORIE == CERTIFICATION
    const CSV_PRODUIT_CATEGORIE_CODE_APPLICATIF_DROIT = 'C';
    const CSV_PRODUIT_GENRE_LIBELLE = 3;
    const CSV_PRODUIT_GENRE_CODE = 4;
    const CSV_PRODUIT_GENRE_CODE_APPLICATIF_DROIT = 'G';
    const CSV_PRODUIT_DENOMINATION_LIBELLE = 5; //DENOMINATION == APPELLATION
    const CSV_PRODUIT_DENOMINATION_CODE = 6;    //DENOMINATION == APPELLATION
    const CSV_PRODUIT_DENOMINATION_CODE_APPLICATIF_DROIT = 'A';
    const CSV_PRODUIT_MENTION_LIBELLE = 7;
    const CSV_PRODUIT_MENTION_CODE = 8;
    const CSV_PRODUIT_MENTION_CODE_APPLICATIF_DROIT = 'M';
    const CSV_PRODUIT_LIEU_LIBELLE = 9;
    const CSV_PRODUIT_LIEU_CODE = 10;
    const CSV_PRODUIT_LIEU_CODE_APPLICATIF_DROIT = 'L';
    const CSV_PRODUIT_COULEUR_LIBELLE = 11;
    const CSV_PRODUIT_COULEUR_CODE = 12;
    const CSV_PRODUIT_COULEUR_CODE_APPLICATIF_DROIT = 'CO';
    const CSV_PRODUIT_CEPAGE_LIBELLE = 13;
    const CSV_PRODUIT_CEPAGE_CODE = 14;
    const CSV_PRODUIT_CEPAGE_CODE_APPLICATIF_DROIT = 'CE';
    const CSV_PRODUIT_DEPARTEMENTS = 15;
    const CSV_PRODUIT_DOUANE_CODE = 16;
    const CSV_PRODUIT_DOUANE_LIBELLE = 17;
    const CSV_PRODUIT_DOUANE_TAXE = 18;
    const CSV_PRODUIT_DOUANE_DATE = 19;
    const CSV_PRODUIT_DOUANE_NOEUD = 20; //a *_DROIT value previously defined
    const CSV_PRODUIT_CVO_TAXE = 21;
    const CSV_PRODUIT_CVO_DATE = 22;
    const CSV_PRODUIT_CVO_NOEUD = 23; //a _DROIT value previously defined
    const CSV_PRODUIT_REPLI_ENTREE = 24;
    const CSV_PRODUIT_REPLI_SORTI = 25;
    const CSV_PRODUIT_DECLASSEMENT_ENTREE = 26;
    const CSV_PRODUIT_DECLASSEMENT_SORTI = 27;
    const CSV_PRODUIT_DENSITE = 28;
    const CSV_PRODUIT_LABELS = 29;
    const CSV_PRODUIT_CODE_PRODUIT = 30;
    const CSV_PRODUIT_CODE_PRODUIT_NOEUD = 31;
    const CSV_PRODUIT_CODE_COMPTABLE = 32;
    const CSV_PRODUIT_CODE_COMPTABLE_NOEUD = 33;
    const CSV_PRODUIT_CODE_DOUANE = 34;
    const CSV_PRODUIT_CODE_DOUANE_NOEUD = 35;
    const CSV_PRODUIT_ALIAS_PRODUIT = 36;
    const CSV_PRODUIT_FORMAT_LIBELLE = 37;
    const CSV_PRODUIT_FORMAT_LIBELLE_NOEUD = 38;
    const CSV_PRODUIT_CEPAGES_AUTORISES = 39;

    protected $config;
    protected $errors;

    public function __construct($config, $file) {
        parent::__construct($file);
        $this->config = $config;
    }

    private function getProduit($hash) {
        return $this->config->declaration->getOrAdd($hash);
    }

    private function getNewHash($line) {
        return 'certifications/' . $this->getKeyProduit($line[self::CSV_PRODUIT_CATEGORIE_CODE], true) .
                '/genres/' . $this->getKeyProduit($line[self::CSV_PRODUIT_GENRE_CODE], true, true) .
                '/appellations/' . $this->getKeyProduit($line[self::CSV_PRODUIT_DENOMINATION_CODE], true, true) .
                '/mentions/' . $this->getKeyProduit($line[self::CSV_PRODUIT_MENTION_CODE], true, true) .
                '/lieux/' . $this->getKeyLieu($line[self::CSV_PRODUIT_LIEU_CODE], true, true) .
                '/couleurs/' . $this->getKeyProduit($line[self::CSV_PRODUIT_COULEUR_CODE], true, true) .
                '/cepages/' . $this->getKeyProduit($line[self::CSV_PRODUIT_CEPAGE_CODE], true, true);
    }

    private function getOldHash($line) {
        return 'certifications/' . $this->getKeyProduit($line[self::CSV_PRODUIT_CATEGORIE_CODE], false) .
                '/genres/' . $this->getKeyProduit($line[self::CSV_PRODUIT_GENRE_CODE], false, true) .
                '/appellations/' . $this->getKeyProduit($line[self::CSV_PRODUIT_DENOMINATION_CODE], false, true) .
                '/mentions/' . $this->getKeyProduit($line[self::CSV_PRODUIT_MENTION_CODE], false, true) .
                '/lieux/' . $this->getKeyLieu($line[self::CSV_PRODUIT_LIEU_CODE], false, true) .
                '/couleurs/' . $this->getKeyProduit($line[self::CSV_PRODUIT_COULEUR_CODE], false, true).
                '/cepages/' . $this->getKeyProduit($line[self::CSV_PRODUIT_CEPAGE_CODE], false, true);
    }

    private function couleurKeyToCode($key) {
        $correspondances = array(1 => "rouge",
            2 => "rose",
            3 => "blanc");

        if (!isset($correspondances[$key])) {

            return $key;
        }

        return $correspondances[$key];
    }
    
    private function getKeyLieu($key, $new = true, $withDefault = false) {
    	if (is_numeric($key) && $key > 0 && $key < 10) {
    		$key = sprintf("%02d", intval($key)); 
    	}
    	return $this->getKeyProduit($key, false, true);
    }

    private function getKeyProduit($key, $new = true, $withDefault = false) {
        $keyProduit = split('/', $key);
        if (count($keyProduit) != 2) {
            return $this->getKey($keyProduit[0], $withDefault);
        } else {
            if ($new) {
                return $this->getKey($keyProduit[0], $withDefault);
            } else {
                return $this->getKey($keyProduit[1], $withDefault);
            }
        }
    }

    private function getKey($key, $withDefault = false) {
        if ($withDefault) {
{'fraction_non_alphanumeric': 0.11236824291654579, 'fraction_numerical': 0.015472391451503724, 'mean_word_length': 3.2385245901639346, 'pattern_counts': {'":': 0, '<': 6, '<?xml version=': 0, '>': 53, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '984211', 'n_tokens_mistral': 4129, 'n_tokens_neox': 3885, 'n_words': 614}