<?php
declare(strict_types=1);

namespace App\Enum\Access;

use MyCLabs\Enum\Enum;

/**
 * Activities functions.
 * @method static STUDENT()
 * @method static ADHERENT()
 * @method static OTHER()
 * @method static PRESIDENT()
 * @method static TEACHER()
 * @method static ADMINISTRATIVE_STAFF()
 * @method static TREASURER()
 * @method static ARCHIVIST()
 * @method static DIRECTOR()
 * @method static MUSIC_DIRECTOR_AND_HEAD()
 */
class FunctionEnum extends Enum
{
    private const STUDENT = 'STUDENT';
    private const TEACHER = 'TEACHER';
    private const DIRECTOR = 'DIRECTOR';
    private const DIRECTOR_ASSISTANT = 'DIRECTOR_ASSISTANT';
    private const INITIATOR = 'INITIATOR';
    private const MONITOR = 'MONITOR';

    private const MUSIC_DIRECTOR_AND_HEAD = 'MUSIC_DIRECTOR_AND_HEAD';
    private const MUSIC_DIRECTOR_AND_HEAD_ASSISTANT = 'MUSIC_DIRECTOR_AND_HEAD_ASSISTANT';
    private const DESK_OFFICER = 'DESK_OFFICER';

    private const ADMINISTRATIVE_OFFICER = 'ADMINISTRATIVE_OFFICER';
    private const ADMINISTRATIVE_SECRETARY = 'ADMINISTRATIVE_SECRETARY';
    private const ADMINISTRATIVE_DIRECTOR = 'ADMINISTRATIVE_DIRECTOR';
    private const ADMINISTRATIVE_DIRECTOR_ASSISTANT = 'ADMINISTRATIVE_DIRECTOR_ASSISTANT';
    private const ARCHIVIST = 'ARCHIVIST';
    private const PRESENTER = 'PRESENTER';
    private const ADMINISTRATIVE_STAFF = 'ADMINISTRATIVE_STAFF';
    private const NETWORK_ANIMATOR = 'NETWORK_ANIMATOR';
    private const CORRESPONDING = 'CORRESPONDING';
    private const COORDINATOR = 'COORDINATOR';
    private const TECHNICAL_STAFF = 'TECHNICAL_STAFF';
    private const ACCOUNTANT = 'ACCOUNTANT';

    private const ACTIVE_MEMBER_OF_THE_CA = 'ACTIVE_MEMBER_OF_THE_CA';
    private const HONORARY_PRESIDENT = 'HONORARY_PRESIDENT';
    private const PRESIDENT = 'PRESIDENT';
    private const YOUTH_REPRESENTATIVE = 'YOUTH_REPRESENTATIVE';
    private const SECRETARY = 'SECRETARY';
    private const ASSISTANT_SECRETARY = 'ASSISTANT_SECRETARY';
    private const TREASURER = 'TREASURER';
    private const TREASURER_ASSISTANT = 'TREASURER_ASSISTANT';
    private const VICE_PRESIDENT = 'VICE_PRESIDENT';
    private const ADHERENT = 'ADHERENT';
    private const NO_MEMBER = 'NO_MEMBER';
    private const VICE_PRESIDENT_OF_HONOR = 'VICE_PRESIDENT_OF_HONOR';
    private const HOUR_PRESIDENT = 'HOUR_PRESIDENT';
    private const PRESIDENT_ASSISTANT = 'PRESIDENT_ASSISTANT';
    private const ACTIVE_COOPTED_MEMBER_OF_THE_CA = 'ACTIVE_COOPTED_MEMBER_OF_THE_CA';
    private const ACTIVE_SUBSTITUTE_MEMBER_OF_THE_CA = 'ACTIVE_SUBSTITUTE_MEMBER_OF_THE_CA';
    private const MEMBER_OF_THE_BOARD = 'MEMBER_OF_THE_BOARD';
    private const MEMBER_OF_BOARD_OF_HONOR = 'MEMBER_OF_BOARD_OF_HONOR';
    private const HONORARY_MEMBER = 'HONORARY_MEMBER';
    private const BENEFACTOR_MEMBER = 'BENEFACTOR_MEMBER';
    private const HOUR_MEMBER = 'HOUR_MEMBER';

    private const OTHER = 'OTHER';

    /**
     * @return list<string>
     */
    public static function getOrganizationStaffAndBoardOfDirectorsMission(): array {
        return [
            self::ACTIVE_MEMBER_OF_THE_CA,
            self::HONORARY_PRESIDENT,
            self::PRESIDENT,
            self::YOUTH_REPRESENTATIVE,
            self::SECRETARY,
            self::ASSISTANT_SECRETARY,
            self::TREASURER,
            self::TREASURER_ASSISTANT,
            self::VICE_PRESIDENT,
            self::VICE_PRESIDENT_OF_HONOR,
            self::HOUR_PRESIDENT,
            self::PRESIDENT_ASSISTANT,
            self::ACTIVE_COOPTED_MEMBER_OF_THE_CA,
            self::ACTIVE_SUBSTITUTE_MEMBER_OF_THE_CA,
            self::MEMBER_OF_THE_BOARD,
            self::MEMBER_OF_BOARD_OF_HONOR,
            self::SECRETARY,
            self::TREASURER,
            self::DIRECTOR,
            self::DIRECTOR_ASSISTANT,
            self::ADMINISTRATIVE_DIRECTOR,
            self::ADMINISTRATIVE_DIRECTOR_ASSISTANT,
            self::MUSIC_DIRECTOR_AND_HEAD,
            self::MUSIC_DIRECTOR_AND_HEAD_ASSISTANT,
            self::DESK_OFFICER,
            self::ADMINISTRATIVE_OFFICER,
            self::ADMINISTRATIVE_SECRETARY,
            self::ARCHIVIST,
            self::PRESENTER,
            self::ADMINISTRATIVE_STAFF,
            self::NETWORK_ANIMATOR,
            self::CORRESPONDING,
            self::COORDINATOR,
            self::TECHNICAL_STAFF,
            self::ACCOUNTANT,
            self::MUSIC_DIRECTOR_AND_HEAD
        ];
    }

    /**
     * Office missions
     *
     * Used by the DolibarrSyncService
     *
     * @return list<string>
     */
    public static function getOfficeMissions(): array
    {
        return [
            self::PRESIDENT,
            self::PRESIDENT_ASSISTANT,
            self::DIRECTOR,
            self::DIRECTOR_ASSISTANT,
            self::SECRETARY,
            self::ASSISTANT_SECRETARY,
            self::TREASURER,
            self::TREASURER_ASSISTANT,
            self::ADMINISTRATIVE_OFFICER,
            self::ADMINISTRATIVE_SECRETARY,
            self::ADMINISTRATIVE_DIRECTOR,
            self::ADMINISTRATIVE_DIRECTOR_ASSISTANT,
            self::ADMINISTRATIVE_STAFF
        ];
    }
}


