from enum import Enum

from django.db.models import TextChoices
from django.utils.translation import gettext_lazy


class TlpEnum(TextChoices):
    """Traffic Light Protocol."""

    WHITE = 'TLP:WHITE', gettext_lazy('Non-confidential')
    GREEN = 'TLP:GREEN', gettext_lazy('Limiting the transmissions of communicable')
    AMBER = 'TLP:AMBER', gettext_lazy('Limited distribution within the organization')
    RED = 'TLP:RED', gettext_lazy('Not for distribution')


class NotificationCategoryEnum(TextChoices):
    """Category for notifications."""

    INCIDENT = 'Уведомление о компьютерном инциденте', gettext_lazy('Notification of a computer incident')
    ATTACK = 'Уведомление о компьютерной атаке', gettext_lazy('Notification of a computer attack')
    VULNERABILITY = 'Уведомление о наличии уязвимости', gettext_lazy('Notification of vulnerability')


class EventTypeEnum(TextChoices):
    """Information Security event types"""

    # Incident
    INVOLVING_INTO_MALWARE_INFRASTRUCTURE = (
        'Вовлечение контролируемого ресурса в инфраструктуру ВПО',
        gettext_lazy('Involving the controlled resource into the malware infrastructure')
    )
    SLOWDOWN_DUE_TO_DDOS = ('Замедление работы ресурса в результате DDoS-атаки',
                            gettext_lazy('Slowdown of the resource due to DDoS attack'))
    INFECT_MALWARE = 'Заражение ВПО', gettext_lazy('Infect malware')
    CAPTURE_NETWORK_TRAFFIC = 'Захват сетевого трафика', gettext_lazy('Capture network traffic')
    USING_FOR_PHISHING = ('Использование контролируемого ресурса для фишинга',
                          gettext_lazy('Using a controlled resource for phishing'))
    COMPROMISE_ACCOUNT = 'Компрометация учетной записи', gettext_lazy('Account compromise')
    UNAUTHORIZED_CHANGE_INFORMATION = ('Несанкционированное изменение информации',
                                       gettext_lazy('Unauthorized change of information '))
    UNAUTHORIZED_DISCLOSURE_INFORMATION = ('Несанкционированное разглашение информации',
                                           gettext_lazy('Unauthorized disclosure of information'))
    PUBLICATION_PROHIBITED_INFORMATION_RU = (
        'Публикация на ресурсе запрещенной законодательством РФ информации',
        gettext_lazy('Publication on the resource of the information prohibited by the legislation of the Russian '
                     'Federation')
    )
    SENDING_SPAM_FROM_RESOURCE = ('Рассылка спам-сообщений с контролируемого ресурса',
                                  gettext_lazy('Sending spam messages from a controlled resource'))
    SUCCESSFUL_EXPLOITED_MALWARE = 'Успешная эксплуатация уязвимости', gettext_lazy('Successful exploited malware')
    # Attack
    DDOS = 'DDoS-атака', gettext_lazy('DDoS-attack')
    AUTHORIZATION_ERROR = 'Неудачные попытки авторизации', gettext_lazy('Unsuccessful attempts by authorization')
    ATTEMPT_INJECT_MALWARE = 'Попытки внедрения ВПО', gettext_lazy('Attempt inject malware')
    ATTEMPT_EXPLOITED_MALWARE = 'Попытки эксплуатации уязвимости', gettext_lazy('Attempt exploited malware')
    FRAUDULENT_INFORMATION = ('Публикация мошеннической информации',
                              gettext_lazy('Publication of fraudulent information'))
    NETWORK_SCANNING = 'Сетевое сканирование', gettext_lazy('Network scanning')
    SOCIAL_ENGINEERING = 'Социальная инженерия', gettext_lazy('Social engineering')
    # Vulnerability
    VULNERABLE_RESOURCE = 'Уязвимый ресурс', gettext_lazy('Vulnerable resource')


class ActivityStatusEnum(TextChoices):
    """Incident response status."""

    TAKEN_ACTION = 'Меры приняты', gettext_lazy('Take action')
    RESPONSE_ACTIVITIES = 'Проводятся мероприятия по реагированию', gettext_lazy('Performance activities are held')
    REOPEN_RESPONSE_ACTIVITIES = ('Возобновлены мероприятия по реагированию',
                                  gettext_lazy('Response renewing measures'))


class AffectedSystemCategoryEnum(TextChoices):
    """Information about categories CII (Critical Information Infrastructure)."""
    RESOURCE_NOT_CII = ('Информационный ресурс не является объектом КИИ',
                        gettext_lazy('Information resource is not an object of CII'))
    CII_WITHOUT_RELEVANCE_CATEGORY = ('Объект КИИ без категории значимости',
                                      gettext_lazy('Object CII without a category of significance'))
    CII_WITH_RELEVANCE_CATEGORY_3 = 'Объект КИИ третьей категории значимости', gettext_lazy('Object CII third category')
    CII_WITH_RELEVANCE_CATEGORY_2 = ('Объект КИИ второй категории значимости',
                                     gettext_lazy('Object CII secondary category'))
    CII_WITH_RELEVANCE_CATEGORY_1 = 'Объект КИИ первой категории значимости', gettext_lazy('Object CII first category')


class AffectedSystemFunction(TextChoices):
    """Scope of functioning subject."""
    NUCLEAR_POWER = 'Атомная энергетика', gettext_lazy('Nuclear power')
    BANKING_AND_OTHER_FINANCIAL_SPHERE = ('Банковская сфера и иные сферы финансового рынка',
                                          gettext_lazy('Banking sphere and other financial markets '))
    MINING_INDUSTRY = 'Горнодобывающая промышленность', gettext_lazy('Mining industry')
    STATE_OR_MUNICIPAL_AUTHORITY = 'Государственная/муниципальная власть', gettext_lazy('State/municipality authority')
    HEALTH = 'Здравоохранение', gettext_lazy('Health')
    STEEL_INDUSTRY = 'Металлургическая промышленность', gettext_lazy('Steel industry')
    SCIENCE = 'Наука', gettext_lazy('Science')
    DEFENCE_INDUSTRY = 'Оборонная промышленность', gettext_lazy('Defense industry')
    EDUCATION = 'Образование', gettext_lazy('Education')
    SPACE_INDUSTRY = 'Ракетно-космическая промышленность', gettext_lazy('Rocket and space industry')
    COMMUNICATION = 'Связь', gettext_lazy('Communication')
    MEDIA = 'СМИ', gettext_lazy('Media')
    FUEL_AND_ENERGY_COMPLEX = 'Топливно-энергетический комплекс', gettext_lazy('Fuel and Energy Complex')
    TRANSPORT = 'Транспорт', gettext_lazy('Transport')
    CHEMICAL_INDUSTRY = 'Химическая промышленность', gettext_lazy('Chemical industry')
    OTHER = 'Иная', gettext_lazy('Other')


class ImpactEffect(TextChoices):
    """Impact of integrity, availability, confidentiality."""
    HIGH = 'Высокое', gettext_lazy('High')
    LOW = 'Низкое', gettext_lazy('Low')
    NO = 'Отсутствует', gettext_lazy('Is missing')


class ActivityType(Enum):
    """Type of activity."""

    MALWARE_CONTROL_CENTER = 'Центр управления ВПО'
    MALWARE_INFRASTRUCTURE = 'Элемент инфраструктуры ВПО'
    MALWARE_SPREAD_SOURCE = 'Источник распространения ВПО'
    NOT_DEFINED = 'Тип не определен'


class NotificationStatusEnum(TextChoices):
    """Notification status."""

    CHECK_NCIRCC = 'Проверка НКЦКИ', gettext_lazy('Check NCIRCC')
    CREATED = 'Создано', gettext_lazy('Created')
    REGISTERED = 'Зарегистрировано', gettext_lazy('Registered')
    ADDITION_REQUIRED = 'Требуется дополнение', gettext_lazy('Addition required')
    DECISION = 'Принято решение', gettext_lazy('Decision')
    ARCHIVED = 'Отправлено в архив', gettext_lazy('Archived')
