namespace Kit.Helpers
{
    public enum WordGender
    {
        /// <summary> Мужской род </summary>
        Masculine = 1,
        /// <summary> Женский род </summary>
        Feminine = 2,
        /// <summary> Средний род </summary>
        Neuter = 3,
    }

    public static class ExceptionMessages
    {
        public const string InvalidContext = "Контекст работника не установлен";

        public const string InvalidModel = "Передана некорректная модель";
        public const string InvalidModelQuery = "Передана некорректная модель (строка)";
        public const string InvalidModelForm = "Передана некорректная модель (форма)";
        public const string InvalidModelBody = "Передана некорректная модель (тело)";
        public const string InvalidTitle = "Указано некорректное наименование";
        public const string InvalidUserId = "Указан некорректный id пользователя";
        public const string InvalidProjectId = "Указан некорректный id проекта";
        public const string InvalidVersionId = "Указан некорректный id версии";
        public const string InvalidWorkerGuid = "Указан некорректный id работника";
        public const string InvalidElementId = "Указан некорректный id элемента";
        public const string InvalidSecObjPermissions = "Указаны некорректные идентификаторы защищаемых объектов и/или функций";
        public const string InvalidRoles = "Указаны некорректные идентификаторы ролей";
        public const string InvalidWorkers = "Указаны некорректные данные работников";
        public const string InvalidWorkerIds = "Указаны некорректные идентификаторы работников";
        public const string InvalidUserToken = "Указан некорректный токен пользователя";
        public const string InvalidLogin = "Указан некорректный логин";
        public const string InvalidPassword = "Указан некорректный пароль";
        public const string InvalidLoginOrPassword = "Указан некорректный логин или пароль";
        public const string InvalidTempToken = "Указан некорректный временный токен";
        public const string InvalidCheckupItemId = "Указан некорректный id экземпляра проверки";
        public const string InvalidCheckupItemObjectLink = "Указана некорректная ссылка на объект";
        public const string InvalidAttachmentId = "Указан некорректный id приложения";
        public const string InvalidGenerciRefGroupId = "Указан некорректный id динамического классификатора";
        public const string InvalidGenerciRefGroupKey = "Указан некорректный ключ динамического классификатора";
        public const string InvalidGenerciRefId = "Указан некорректный id элемента динамического классификатора";
        public const string InvalidAttachmentFile = "Отсутствует прикреплённый файл";
        public const string InvalidAttachmentFiles = "Отсутствуют прикреплённые файлы";
        public const string InvalidChecklistIdList = "Отсутствуют элементы в списке id проверочных листов";

        public const string XmlDoc404Workers = "Документ со списком работников не найден";
        public const string XmlDoc404Checklist = "Документ со структурой проверочного листа не найден";
        public const string XmlDoc404Classifiers = "Документ со структурой классификаторов не найден";
        public const string XmlDoc404CheckupItem = "Документ со структурой проверки не найден";
        public const string XmlDoc404CheckupType = "Документ со списком типов проверок не найден";
        public const string XmlDoc404CheckupCategory = "Документ со списком категорий проверок не найден";
        public const string XmlDoc404CheckupQualityMatrix = "Документ с матрицей оценки проверок не найден";

        public const string Context404ProjectId = "В контексте работника не указан id проекта";
        public const string Context404VersionId = "В контексте работника не указан id версии";
        public const string Context404WorkerGuid = "В контексте работника не указан id работника";
        
        public const string Context403Version = "Работник не имеет доступа к версии проекта";
        public const string Context403Profiles = "Пользователю не доступен ни один вариант входа";

        public const string User404ByToken = "Пользователь по токену не найден";
        public const string User404ById = "Пользователь по id не найден";
        public const string User404ProfileById = "Профиль пользователя по id не найден";

        public const string Code500 = "На сервере произошла немзвестная ошибка";

        /// <returns>$"Указан некорректный id {<paramref name="elementName"/>}"</returns>
        public static string InvalidId(string elementName)
        {
            return $"Указан некорректный id {elementName}";
        }

        /// <returns>$"{<paramref name="elementName"/>} не найден(-а, -о в зависимости от значения <paramref name="wordGender"/>)"</returns>
        public static string Element404(string elementName, WordGender wordGender)
        {
            string notFoundWord = string.Empty;
            switch (wordGender)
            {
                case WordGender.Masculine:
                    notFoundWord = "найден";
                    break;
                case WordGender.Feminine:
                    notFoundWord = "найдена";
                    break;
                case WordGender.Neuter:
                    notFoundWord = "найдено";
                    break;
            }

            return $"{elementName} не {notFoundWord}";
        }

        public static string Element404CheckupItem = Element404("Экземпляр проверки", WordGender.Masculine);
        public static string Element404AttachmentFile = Element404("Файл приложения", WordGender.Masculine);
    }
}
