import { TypeSelectOptionType } from 'components/DashboardTable/types';
import { TypeCategory } from './types';

export const INCIDENT_TYPE_OPTION = ({
  accountCompromise,
  capturingNetworkTraffic,
  involvementOfAControlledResource,
  malwareInfection,
  publicationOfProhibitedInformationOnTheResource,
  resourceSlowdown,
  sendingSpamMessages,
  successfulExploitationOfAVulnerability,
  unauthorizedChangeOfInformation,
  unauthorizedDisclosureOfInformation,
}: {
  accountCompromise: string;
  capturingNetworkTraffic: string;
  involvementOfAControlledResource: string;
  malwareInfection: string;
  publicationOfProhibitedInformationOnTheResource: string;
  resourceSlowdown: string;
  sendingSpamMessages: string;
  successfulExploitationOfAVulnerability: string;
  unauthorizedChangeOfInformation: string;
  unauthorizedDisclosureOfInformation: string;
}): TypeSelectOptionType => [
  {
    label: involvementOfAControlledResource,
    value: 'Вовлечение контролируемого ресурса в инфраструктуру ВПО',
  },
  {
    label: resourceSlowdown,
    value: 'Замедление работы ресурса в результате DDoS-атаки',
  },
  { label: malwareInfection, value: 'Заражение ВПО' },
  {
    label: capturingNetworkTraffic,
    value:
      'Захват сетевого трафика, Использование контролируемого ресурса для фишинга',
  },
  {
    label: accountCompromise,
    value: 'Компрометация учетной записи',
  },
  {
    label: unauthorizedChangeOfInformation,
    value: 'Несанкционированное изменение информации',
  },
  {
    label: unauthorizedDisclosureOfInformation,
    value: 'Несанкционированное разглашение информации',
  },
  {
    label: publicationOfProhibitedInformationOnTheResource,
    value: 'Публикация на ресурсе запрещенной законодательством РФ информации',
  },
  {
    label: sendingSpamMessages,
    value: 'Рассылка спам-сообщений с контролируемого ресурса',
  },
  {
    label: successfulExploitationOfAVulnerability,
    value: 'Успешная эксплуатация уязвимости',
  },
];
export const ATTACK_TYPE_OPTION = ({
  attemptsToExploitTheVulnerability,
  attemptsToIntroduceMalware,
  dDoSAttack,
  failedAuthorizationAttempts,
  networkScanning,
  publicationOfFraudulentInformation,
  socialEngineering,
}: {
  attemptsToExploitTheVulnerability: string;
  attemptsToIntroduceMalware: string;
  dDoSAttack: string;
  failedAuthorizationAttempts: string;
  networkScanning: string;
  publicationOfFraudulentInformation: string;
  socialEngineering: string;
}): TypeSelectOptionType => [
  {
    label: failedAuthorizationAttempts,
    value: 'Неудачные попытки авторизации',
  },
  {
    label: attemptsToExploitTheVulnerability,
    value: 'Попытки эксплуатации уязвимости',
  },
  {
    label: attemptsToIntroduceMalware,
    value: 'Попытки внедрения ВПО',
  },
  {
    label: publicationOfFraudulentInformation,
    value: 'Публикация мошеннической информации',
  },
  {
    label: dDoSAttack,
    value: 'DDoS-атака',
  },
  {
    label: socialEngineering,
    value: 'Социальная инженерия',
  },
  {
    label: networkScanning,
    value: 'Сетевое сканирование',
  },
];
export const VULNERABILITY_TYPE_OPTION = ({
  vulnerableResource,
}: {
  vulnerableResource: string;
}): TypeSelectOptionType => [
  {
    label: vulnerableResource,
    value: 'Уязвимый ресурс',
  },
];

export const ACTIVITY_STATUS_OPTIONS = ({
  actionTaken,
  responseActivitiesAreUnderway,
  responseActivitiesResumed,
}: {
  actionTaken: string;
  responseActivitiesAreUnderway: string;
  responseActivitiesResumed: string;
}): TypeSelectOptionType => [
  {
    label: actionTaken,
    value: 'Меры приняты',
  },
  {
    label: responseActivitiesAreUnderway,
    value: 'Проводятся мероприятия по реагированию',
  },
  {
    label: responseActivitiesResumed,
    value: 'Возобновлены мероприятия по реагированию',
  },
];

export const TLP_STATUS_OPTIONS = ({
  WHITE,
  GREEN,
  AMBER,
  RED,
}: {
  WHITE: string;
  GREEN: string;
  AMBER: string;
  RED: string;
}): TypeSelectOptionType => [
  {
    label: WHITE,
    value: 'TLP:WHITE',
  },
  {
    label: GREEN,
    value: 'TLP:GREEN',
  },
  {
    label: AMBER,
    value: 'TLP:AMBER',
  },
  {
    label: RED,
    value: 'TLP:RED',
  },
];

export const IMPACT_OPTION = ({
  high,
  low,
  missing,
}: {
  high: string;
  low: string;
  missing: string;
}): TypeSelectOptionType => [
  {
    label: high,
    value: 'Высокое',
  },
  {
    label: low,
    value: 'Низкое',
  },
  {
    label: missing,
    value: 'Отсутствует',
  },
];
export const AFFECTED_SYSTEM_CATEGORY_OPTION = ({
  informationResourceIsNotAnObjectOfCii,
  ciiObjectWithoutSignificanceCategory,
  ciiObjectOfTheThirdCategoryOfSignificance,
  ciiObjectOfTheSecondCategoryOfSignificance,
  ciiObjectOfTheFirstCategoryOfSignificance,
}: {
  informationResourceIsNotAnObjectOfCii: string;
  ciiObjectWithoutSignificanceCategory: string;
  ciiObjectOfTheThirdCategoryOfSignificance: string;
  ciiObjectOfTheSecondCategoryOfSignificance: string;
  ciiObjectOfTheFirstCategoryOfSignificance: string;
}): TypeSelectOptionType => [
  {
    label: informationResourceIsNotAnObjectOfCii,
    value: 'Информационный ресурс не является объектом КИИ',
  },
  {
    label: ciiObjectWithoutSignificanceCategory,
    value: 'Объект КИИ без категории значимости',
  },
  {
    label: ciiObjectOfTheThirdCategoryOfSignificance,
    value: 'Объект КИИ третьей категории значимости',
  },
  {
    label: ciiObjectOfTheSecondCategoryOfSignificance,
    value: 'Объект КИИ второй категории значимости',
  },
  {
    label: ciiObjectOfTheFirstCategoryOfSignificance,
    value: 'Объект КИИ первой категории значимости',
  },
];

export const OPTIONS_NCIRCC_NOTIFICATION = ({
  computerAttackNotification,
  computerIncidentNotification,
  vulnerabilityNotification,
}: {
  computerAttackNotification: string;
  computerIncidentNotification: string;
  vulnerabilityNotification: string;
}): TypeSelectOptionType => [
  {
    value: '0',
    label: computerIncidentNotification,
  },
  {
    value: '1',
    label: computerAttackNotification,
  },
  {
    value: '2',
    label: vulnerabilityNotification,
  },
];

export const typeCategory: { [key in TypeCategory]: string } = {
  '0': 'Уведомление о компьютерном инциденте',
  '1': 'Уведомление о компьютерной атаке',
  '2': 'Уведомление о наличии уязвимости',
};
