<?php

declare(strict_types=1);

namespace App\Enum\Access;

use App\Enum\EnumMethodsTrait;

/**
 * Activities functions.
 */
enum FunctionEnum: string
{
    use EnumMethodsTrait;

    case STUDENT = 'STUDENT';
    case TEACHER = 'TEACHER';
    case DIRECTOR = 'DIRECTOR';
    case DIRECTOR_ASSISTANT = 'DIRECTOR_ASSISTANT';
    case INITIATOR = 'INITIATOR';
    case MONITOR = 'MONITOR';
    case MUSIC_DIRECTOR_AND_HEAD = 'MUSIC_DIRECTOR_AND_HEAD';
    case MUSIC_DIRECTOR_AND_HEAD_ASSISTANT = 'MUSIC_DIRECTOR_AND_HEAD_ASSISTANT';
    case DESK_OFFICER = 'DESK_OFFICER';
    case ADMINISTRATIVE_OFFICER = 'ADMINISTRATIVE_OFFICER';
    case ADMINISTRATIVE_SECRETARY = 'ADMINISTRATIVE_SECRETARY';
    case ADMINISTRATIVE_DIRECTOR = 'ADMINISTRATIVE_DIRECTOR';
    case ADMINISTRATIVE_DIRECTOR_ASSISTANT = 'ADMINISTRATIVE_DIRECTOR_ASSISTANT';
    case ARCHIVIST = 'ARCHIVIST';
    case PRESENTER = 'PRESENTER';
    case ADMINISTRATIVE_STAFF = 'ADMINISTRATIVE_STAFF';
    case NETWORK_ANIMATOR = 'NETWORK_ANIMATOR';
    case CORRESPONDING = 'CORRESPONDING';
    case COORDINATOR = 'COORDINATOR';
    case TECHNICAL_STAFF = 'TECHNICAL_STAFF';
    case ACCOUNTANT = 'ACCOUNTANT';
    case COM_STAFF = 'COM_STAFF';
    case ACTIVE_MEMBER_OF_THE_CA = 'ACTIVE_MEMBER_OF_THE_CA';
    case HONORARY_PRESIDENT = 'HONORARY_PRESIDENT';
    case PRESIDENT = 'PRESIDENT';
    case YOUTH_REPRESENTATIVE = 'YOUTH_REPRESENTATIVE';
    case SECRETARY = 'SECRETARY';
    case ASSISTANT_SECRETARY = 'ASSISTANT_SECRETARY';
    case TREASURER = 'TREASURER';
    case TREASURER_ASSISTANT = 'TREASURER_ASSISTANT';
    case VICE_PRESIDENT = 'VICE_PRESIDENT';
    case ADHERENT = 'ADHERENT';
    case NO_MEMBER = 'NO_MEMBER';
    case VICE_PRESIDENT_OF_HONOR = 'VICE_PRESIDENT_OF_HONOR';
    case HOUR_PRESIDENT = 'HOUR_PRESIDENT';
    case PRESIDENT_ASSISTANT = 'PRESIDENT_ASSISTANT';
    case ACTIVE_COOPTED_MEMBER_OF_THE_CA = 'ACTIVE_COOPTED_MEMBER_OF_THE_CA';
    case ACTIVE_SUBSTITUTE_MEMBER_OF_THE_CA = 'ACTIVE_SUBSTITUTE_MEMBER_OF_THE_CA';
    case MEMBER_OF_THE_BOARD = 'MEMBER_OF_THE_BOARD';
    case MEMBER_OF_BOARD_OF_HONOR = 'MEMBER_OF_BOARD_OF_HONOR';
    case HONORARY_MEMBER = 'HONORARY_MEMBER';
    case BENEFACTOR_MEMBER = 'BENEFACTOR_MEMBER';
    case HOUR_MEMBER = 'HOUR_MEMBER';
    case OTHER = 'OTHER';
    case ARTISTIC_DIRECTOR = 'ARTISTIC_DIRECTOR';
    case ARTISTIC_DIRECTOR_ASSISTANT = 'ARTISTIC_DIRECTOR_ASSISTANT';

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