from enum import Enum


__all__ = (
    'TAddress', 'TDocument', 'TScan',
    'FPerson', 'FAddress', 'FDocument', 'FScan',
)


class TypesEnum(str, Enum):
    pass


class TAddress(TypesEnum):
    FACTUAL = 'factual'
    JURIDICAL = 'juridical'


class TDocument(TypesEnum):
    PASSPORT_BOOK = 'passport'
    PASSPORT_ID = 'idpassport'
    PASSPORT_INTERNATIONAL = 'zpassport'
    IDENTITY = 'ident'


class TScan(TypesEnum):
    PASSPORT_BOOK = 'passport'
    PASSPORT_ID = 'idpassport'
    PASSPORT_INTERNATIONAL = 'zpassport'
    RNOKPP = 'inn'
    PHOTO = 'personalPhoto'


class FieldsEnum(str, Enum):
    pass


class FPerson(FieldsEnum):
    # * Прізвище
    LAST_NAME = 'lastName'
    # * Ім’я
    FIRST_NAME = 'firstName'
    # * По батькові
    MIDDLE_NAME = 'middleName'

    # Номер телефону
    # 380ХХХХХХХХХ - де Х може приймати тільки цифрове значення.
    PHONE = 'phone'
    # Електронна адреса
    EMAIL = 'email'

    # Реєстраційний номер облікової картки платника податків, номер
    # (та за наявності - серію) паспорта громадянина України, в якому
    # проставлено відмітку про відмову від прийняття реєстраційного
    # номера облікової картки платника податків, чи номер паспорта
    # із записом про відмову від прийняття реєстраційного номера облікової
    # картки платника податків в електронному безконтактному носії.
    # * Заповнюється відповідно до вимог законодавства України
    RNOKPP = 'inn'

    # Унікальний ідентифікатор клієнта в банку.
    # У випадку якщо банк не має такого ідентифікатора, можливо
    # вказати значення ключа іnn або серію й номер паспорта.
    CLIENT_ID = 'clId'
    # Статичний текст з інформацією про надані дані банком щодо користувача,
    # дата і час надання.
    # "Інформація надана засобами Системи BankID НБУ dd.mm.yyyy hh.mm"
    CLIENT_ID_TEXT = 'clIdText'

    # Дата народження.
    # * dd.mm.yyyy
    BIRTH_DAY = 'birthDay'
    # Стать
    # * Можливі значення: латинська літера M – чоловіча або F ‒ жіноча
    SEX = 'sex'
    # Соціальний статус
    # Наприклад: “студент”, “пенсіонер”, “тимчасово безробітний”, “працюючий”,
    # “нерегулярна зайнятість”.
    SOCIAL_STATUS = 'socStatus'

    # Ознака, чи визначена фізична особа банком-повіреним такою,
    # що належить до категорії PEPs (публічні особи, близькі, пов’язані).
    # Можливі значення: 1 – так, 0 – ні.
    IS_PEPS = 'flagPEPs'
    # Ознака, чи визначена фізична особа банком-повіреним такою, що включена
    # до переліку осіб, пов’язаних зі здійсненням терористичної діяльності або
    # щодо яких застосовано міжнародні санкції.
    # Можливі значення: 1 – так, 0 – ні.
    IS_TERRORIST = 'flagPersonTerror'
    # Ознака, чи визначена фізична особа банком-повіреним такою,
    # що включена до переліку осіб, щодо яких застосовані персональні,
    # спеціальні економічні та інші обмежувальні заходи (санкції),
    # санкції РНБОУ.
    # Можливі значення: 1 – так, 0 – ні.
    IS_RESTRICTED = 'flagRestriction'
    # Ознака, чи присвоєний клієнту банком-повіреним (неприйнятно) високий
    # рівень ризику ПВК/ФТ.
    # Можливі значення: 1 – так, 0 – ні.
    IS_HIGH_RISK = 'flagTopLevelRisk'
    # Ознака, чи визначена фізична особа банком-повіреним такою,
    # що є резидентом України.
    # Можливі значення: 1 – так, 0 – ні.
    IS_UA_RESIDENT = 'uaResident'


class FAddress(FieldsEnum):
    # Країна
    # * Двозначний літерний код країни за стандартом ISO_3166-1 (alfa-2).
    # Наприклад: UA
    COUNTRY = 'country'
    # Область.
    # * Якщо адреса користувача не передбачає наявності області,
    # відповідне значення не передається у відповіді абонента-ідентифікатора.
    REGION = 'state'
    # Район.
    # * Якщо адреса користувача не передбачає наявності району,
    # відповідне значення не передається у відповіді абонентаідентифікатора.
    DISTRICT = 'area'
    # * Місто
    CITY = 'city'
    # * Вулиця
    STREET = 'street'
    # * Номер будинку
    STREET_NUMBER = 'houseNo'
    # Номер квартири.
    # * Якщо адреса користувача не передбачає наявності номеру квартири,
    # відповідне значення не передається у відповіді абонентаідентифікатора.
    FLAT_NUMBER = 'flatNo'


class FDocument(FieldsEnum):
    # * Назва документу
    TYPE = 'typeName'
    # * Серія документа
    # (для типу idpassport - не
    # заповнюється).
    SERIES = 'series'
    # * Номер документа
    NUMBER = 'number'
    # * Яким органом видано документ
    ISSUED_BY = 'issue'
    # Країна видачі документа
    # Двозначний літерний код країни за стандартом ISO_3166-1 (alfa-2).
    # Наприклад: UA
    ISSUED_BY_COUNTRY = 'issueCountryIso2'
    # Дата видачі документу
    # * dd.mm.yyyy
    ISSUED_AT = 'dateIssue'
    # Термін дії (для типу passport - не заповнюється)
    # * dd.mm.yyyy
    EXPIRED_AT = 'dateExpiration'


class FScan(FieldsEnum):
    # Файл сканованої копії документу.
    # Закодований по стандарту BASE64.
    # Якщо скан-копія знаходиться в архіві, то файл скан-копій
    # обов’язково повинен мати розширення (наприклад: pdf, jpg, png, bmp).
    # Рекомендована роздільна здатність скан-копії не менше 200 DPI.
    DATA = 'scanFile'
    # У випадку, якщо файли об’єднанні або заархівовані у zip форматі,
    # то зазначається розширення zip.
    # Розширення файлу, який знаходиться в значенні ключа scanFile.
    EXTENSION = 'extension'
    # Дата створення скан-копії документа
    # dd.mm.yyyy
    CREATED_AT = 'dateCreate'
