package com.magistr.app.model;

import java.util.Locale;

public enum ScheduleLessonCategory {
    LECTURE("Лекции"),
    LABORATORY("Лабораторные"),
    PRACTICE("Практики");

    private final String displayName;

    ScheduleLessonCategory(String displayName) {
        this.displayName = displayName;
    }

    public String getDisplayName() {
        return displayName;
    }

    public static ScheduleLessonCategory fromLessonType(LessonType lessonType) {
        if (lessonType == null || lessonType.getLessonType() == null) {
            throw new IllegalArgumentException("Тип занятия должен быть лекцией, практикой или лабораторной работой");
        }
        String name = lessonType.getLessonType()
                .trim()
                .toLowerCase(Locale.forLanguageTag("ru-RU"))
                .replace('ё', 'е');
        boolean lecture = name.equals("лекция") || name.equals("лекции") || name.startsWith("лекц");
        boolean laboratory = name.equals("лабораторная работа")
                || name.equals("лабораторные работы")
                || name.startsWith("лаб")
                || name.contains("лаборатор");
        boolean practice = name.equals("практика")
                || name.equals("практики")
                || name.startsWith("практ")
                || name.contains("практичес")
                || name.contains("семинар");
        int matches = (lecture ? 1 : 0) + (laboratory ? 1 : 0) + (practice ? 1 : 0);
        if (matches > 1) {
            throw new IllegalArgumentException("Тип занятия \"" + lessonType.getLessonType()
                    + "\" неоднозначен. Используйте отдельный тип: лекция, практика или лабораторная работа");
        }
        if (lecture) {
            return LECTURE;
        }
        if (laboratory) {
            return LABORATORY;
        }
        if (practice) {
            return PRACTICE;
        }
        throw new IllegalArgumentException("Тип занятия \"" + lessonType.getLessonType()
                + "\" должен быть лекцией, практикой или лабораторной работой");
    }
}
