# -*- coding: utf-8 -*-
#

from django.db.models import TextChoices, IntegerChoices
from django.utils.translation import gettext_lazy as _


class RiskLevelChoices(IntegerChoices):
    accept = 0, _('Accept')
    warning = 4, _('Warning')
    reject = 5, _('Reject')
    review_reject = 6, _('Review & Reject')
    review_accept = 7, _('Review & Accept')
    review_cancel = 8, _('Review & Cancel')

    @classmethod
    def get_label(cls, level):
        label = dict(cls.choices).get(level)
        return label


class ReplayStorageType(TextChoices):
    null = 'null', 'Null',
    server = 'server', 'Server'
    s3 = 's3', 'S3'
    ceph = 'ceph', 'Ceph'
    swift = 'swift', 'Swift'
    oss = 'oss', 'OSS'
    azure = 'azure', 'Azure'
    obs = 'obs', 'OBS'
    cos = 'cos', 'COS'
    sftp = 'sftp', 'SFTP'


class CommandStorageType(TextChoices):
    null = 'null', 'Null',
    server = 'server', 'Server'
    es = 'es', 'Elasticsearch'


# Component Status Choices
# ------------------------

class ComponentLoad(TextChoices):
    critical = 'critical', _('Critical')
    high = 'high', _('High')
    normal = 'normal', _('Normal')
    offline = 'offline', _('Offline')

    @classmethod
    def status(cls):
        return set(dict(cls.choices).keys())


class TerminalType(TextChoices):
    koko = 'koko', 'KoKo'
    guacamole = 'guacamole', 'Guacamole'
    omnidb = 'omnidb', 'OmniDB'
    xrdp = 'xrdp', 'Xrdp'
    lion = 'lion', 'Lion'
    core = 'core', 'Core'
    celery = 'celery', 'Celery'
    magnus = 'magnus', 'Magnus'
    razor = 'razor', 'Razor'
    tinker = 'tinker', 'Tinker'
    video_worker = 'video_worker', 'Video Worker'
    chen = 'chen', 'Chen'
    kael = 'kael', 'Kael'
    panda = 'panda', 'Panda'
    nec = 'nec', 'Nec'
    facelive = 'facelive', 'Facelive'

    @classmethod
    def types(cls):
        return set(dict(cls.choices).keys())


class PublishStatus(TextChoices):
    pending = 'pending', _('Pending')
    success = 'success', _("Success")
    failed = 'failed', _("Failed")
    mismatch = 'mismatch', _("Mismatch")


class SessionType(TextChoices):
    normal = 'normal', _('Normal')
    tunnel = 'tunnel', _('Tunnel')
    command = 'command', _('Command')
    sftp = 'sftp', _('SFTP')


class ActionPermission(TextChoices):
    readonly = "readonly", _('Read only')
    writable = "writable", _('Writable')


class TaskNameType(TextChoices):
    kill_session = "kill_session", _('Kill session')
    lock_session = "lock_session", _('Lock session')
    unlock_session = "unlock_session", _('Unlock session')


class SessionErrorReason(TextChoices):
    connect_failed = 'connect_failed', _('Connect failed')
    replay_create_failed = 'replay_create_failed', _('Replay create failed')
    replay_upload_failed = 'replay_upload_failed', _('Replay upload failed')
    replay_convert_failed = 'replay_convert_failed', _('Replay convert failed')
    replay_unsupported = 'replay_unsupported', _('Replay unsupported')


class LoginFrom(TextChoices):
    ST = 'ST', 'SSH Terminal'
    RT = 'RT', 'RDP Terminal'
    WT = 'WT', 'Web Terminal'
    DT = 'DT', 'DB Terminal'
    VT = 'VT', 'VNC Terminal'

    @classmethod
    def as_dict(cls):
        return {choice.value: choice.label for choice in cls}
