from django.utils.translation import gettext_lazy as _

from utilities.choices import ChoiceSet

#
# Data sources
#


class DataSourceStatusChoices(ChoiceSet):
    NEW = 'new'
    QUEUED = 'queued'
    SYNCING = 'syncing'
    COMPLETED = 'completed'
    FAILED = 'failed'

    CHOICES = (
        (NEW, _('New'), 'blue'),
        (QUEUED, _('Queued'), 'orange'),
        (SYNCING, _('Syncing'), 'cyan'),
        (COMPLETED, _('Completed'), 'green'),
        (FAILED, _('Failed'), 'red'),
    )


#
# Managed files
#

class ManagedFileRootPathChoices(ChoiceSet):
    SCRIPTS = 'scripts'  # settings.SCRIPTS_ROOT
    REPORTS = 'reports'  # settings.REPORTS_ROOT

    CHOICES = (
        (SCRIPTS, _('Scripts')),
        (REPORTS, _('Reports')),
    )


#
# Jobs
#

class JobStatusChoices(ChoiceSet):

    STATUS_PENDING = 'pending'
    STATUS_SCHEDULED = 'scheduled'
    STATUS_RUNNING = 'running'
    STATUS_COMPLETED = 'completed'
    STATUS_ERRORED = 'errored'
    STATUS_FAILED = 'failed'

    CHOICES = (
        (STATUS_PENDING, _('Pending'), 'cyan'),
        (STATUS_SCHEDULED, _('Scheduled'), 'gray'),
        (STATUS_RUNNING, _('Running'), 'blue'),
        (STATUS_COMPLETED, _('Completed'), 'green'),
        (STATUS_ERRORED, _('Errored'), 'red'),
        (STATUS_FAILED, _('Failed'), 'red'),
    )

    ENQUEUED_STATE_CHOICES = (
        STATUS_PENDING,
        STATUS_SCHEDULED,
        STATUS_RUNNING,
    )

    TERMINAL_STATE_CHOICES = (
        STATUS_COMPLETED,
        STATUS_ERRORED,
        STATUS_FAILED,
    )


class JobNotificationChoices(ChoiceSet):
    NOTIFICATION_ALWAYS = 'always'
    NOTIFICATION_ON_FAILURE = 'on_failure'
    NOTIFICATION_NEVER = 'never'

    CHOICES = (
        (NOTIFICATION_ALWAYS, _('Always')),
        (NOTIFICATION_ON_FAILURE, _('On failure')),
        (NOTIFICATION_NEVER, _('Never')),
    )


class JobIntervalChoices(ChoiceSet):
    INTERVAL_MINUTELY = 1
    INTERVAL_HOURLY = 60
    INTERVAL_DAILY = 60 * 24
    INTERVAL_WEEKLY = 60 * 24 * 7

    CHOICES = (
        (INTERVAL_MINUTELY, _('Minutely')),
        (INTERVAL_HOURLY, _('Hourly')),
        (INTERVAL_HOURLY * 12, _('12 hours')),
        (INTERVAL_DAILY, _('Daily')),
        (INTERVAL_WEEKLY, _('Weekly')),
        (INTERVAL_DAILY * 30, _('30 days')),
    )


#
# ObjectChanges
#

class ObjectChangeActionChoices(ChoiceSet):

    ACTION_CREATE = 'create'
    ACTION_UPDATE = 'update'
    ACTION_DELETE = 'delete'

    CHOICES = (
        (ACTION_CREATE, _('Created'), 'green'),
        (ACTION_UPDATE, _('Updated'), 'blue'),
        (ACTION_DELETE, _('Deleted'), 'red'),
    )
