<?php

namespace App\Enum;

abstract class FluxEnum
{
    const ACHAT_MONNAIE_ADHERENT = 'achat_monnaie_adherent';
    const ACHAT_MONNAIE_PRESTATAIRE = 'achat_monnaie_prestataire';
    const CHANGE_ADHERENT_COMPTOIR = 'adherent_comptoir';
    const CHANGE_PRESTATAIRE_COMPTOIR = 'prestataire_comptoir';
    const COTISATION_ADHERENT = 'cotisation_adherent';
    const COTISATION_PRESTATAIRE = 'cotisation_prestataire';
    const RECONVERSION = 'reconversion';
    const RETRAIT_ADHERENT = 'retrait_adherent';
    const RETRAIT_PRESTATAIRE = 'retrait_prestataire';
    const TRANSACTION_ADHERENT_ADHERENT = 'adherent_adherent';
    const TRANSACTION_ADHERENT_PRESTATAIRE = 'adherent_prestataire';
    const TRANSACTION_PRESTATAIRE_ADHERENT = 'prestataire_adherent';
    const TRANSACTION_PRESTATAIRE_PRESTATAIRE = 'prestataire_prestataire';
    const TRANSFERT_COMPTOIR_GROUPE = 'comptoir_groupe';
    const TRANSFERT_GROUPE_COMPTOIR = 'groupe_comptoir';
    const TRANSFERT_GROUPE_SIEGE = 'groupe_siege';
    const TRANSFERT_SIEGE_GROUPE = 'siege_groupe';
    const VENTE_COMPTOIR_ADHERENT = 'comptoir_adherent';
    const VENTE_COMPTOIR_PRESTATAIRE = 'comptoir_prestataire';

    /** @var array user friendly named type */
    protected static $typeName = [
        self::ACHAT_MONNAIE_ADHERENT => 'achat monnaie adherent',
        self::ACHAT_MONNAIE_PRESTATAIRE => 'achat monnaie prestataire',
        self::CHANGE_ADHERENT_COMPTOIR => 'adherent comptoir ',
        self::CHANGE_PRESTATAIRE_COMPTOIR => 'prestataire comptoir ',
        self::COTISATION_ADHERENT => 'cotisation adherent ',
        self::COTISATION_PRESTATAIRE => 'cotisation prestataire ',
        self::RECONVERSION => 'reconversion',
        self::RETRAIT_ADHERENT => 'retrait adherent ',
        self::RETRAIT_PRESTATAIRE => 'retrait prestataire ',
        self::TRANSACTION_ADHERENT_ADHERENT => 'adherent adherent ',
        self::TRANSACTION_ADHERENT_PRESTATAIRE => 'adherent prestataire ',
        self::TRANSACTION_PRESTATAIRE_ADHERENT => 'prestataire adherent ',
        self::TRANSACTION_PRESTATAIRE_PRESTATAIRE => 'prestataire prestataire ',
        self::TRANSFERT_COMPTOIR_GROUPE => 'comptoir groupe ',
        self::TRANSFERT_GROUPE_COMPTOIR => 'groupe comptoir ',
        self::TRANSFERT_GROUPE_SIEGE => 'groupe siege ',
        self::TRANSFERT_SIEGE_GROUPE => 'siege groupe ',
        self::VENTE_COMPTOIR_ADHERENT => 'comptoir adherent ',
        self::VENTE_COMPTOIR_PRESTATAIRE => 'comptoir prestataire ',
    ];

    /**
     * @param string $typeShortName
     *
     * @return string
     */
    public static function getTypeName($typeShortName)
    {
        if (!isset(static::$typeName[$typeShortName])) {
            return "Unknown type ($typeShortName)";
        }

        return static::$typeName[$typeShortName];
    }

    /**
     * @return array<string>
     */
    public static function getAvailableTypes()
    {
        return [
            self::ACHAT_MONNAIE_ADHERENT,
            self::ACHAT_MONNAIE_PRESTATAIRE,
            self::CHANGE_ADHERENT_COMPTOIR,
            self::CHANGE_PRESTATAIRE_COMPTOIR,
            self::COTISATION_ADHERENT,
            self::COTISATION_PRESTATAIRE,
            self::RECONVERSION,
            self::RETRAIT_ADHERENT,
            self::RETRAIT_PRESTATAIRE,
            self::TRANSACTION_ADHERENT_ADHERENT,
            self::TRANSACTION_ADHERENT_PRESTATAIRE,
            self::TRANSACTION_PRESTATAIRE_ADHERENT,
            self::TRANSACTION_PRESTATAIRE_PRESTATAIRE,
            self::TRANSFERT_COMPTOIR_GROUPE,
            self::TRANSFERT_GROUPE_COMPTOIR,
            self::TRANSFERT_GROUPE_SIEGE,
            self::TRANSFERT_SIEGE_GROUPE,
            self::VENTE_COMPTOIR_ADHERENT,
            self::VENTE_COMPTOIR_PRESTATAIRE,
        ];
    }
}
