from django import forms
from django.conf import settings
from django.utils.translation import gettext as _
from pytz import common_timezones
from .models import Theme, Preference


PRIVACY_CHOICES = (
    ("public", _("Public")),
    ("unlisted", _("Unlisted")),
    ("private", _("Private")),
    ("direct", _("Direct")),
)

timezones = [(tz, tz) for tz in common_timezones]


class LoginForm(forms.Form):
    instance = forms.CharField(label=_("Instance"), max_length=256)
    email = forms.EmailField(label=_("Email"))
    password = forms.CharField(widget=forms.PasswordInput())


class OAuthLoginForm(forms.Form):
    instance = forms.CharField(label=_("Instance"), max_length=256)


class PreferencesForm(forms.ModelForm):
    class Meta:
        model = Preference
        fields = [
            "theme",
            "filter_replies",
            "filter_boosts",
            "timezone",
            "no_javascript",
            "notifications",
            "click_to_load",
            "lightbox",
            "filter_notifications",
            "poll_frequency",
        ]


class PostForm(forms.Form):
    """def status_post(self, status, in_reply_to_id=None, media_ids=None,
                       sensitive=False, visibility=None, spoiler_text=None):"""

    status = forms.CharField(label="Toot", widget=forms.Textarea)
    visibility = forms.ChoiceField(
        label=_("Toot visibility"), choices=PRIVACY_CHOICES, required=False
    )
    spoiler_text = forms.CharField(label=_("CW or Subject"), required=False)
    media_file_1 = forms.FileField(label=_("Media 1"), required=False)
    media_text_1 = forms.CharField(label=_("Describe media 1."), required=False)
    media_file_2 = forms.FileField(label=_("Media 2"), required=False)
    media_text_2 = forms.CharField(label=_("Describe media 2."), required=False)
    media_file_3 = forms.FileField(label=_("Media 3"), required=False)
    media_text_3 = forms.CharField(label=_("Describe media 3."), required=False)
    media_file_4 = forms.FileField(label=_("Media 4"), required=False)
    media_text_4 = forms.CharField(label=_("Describe media 4."), required=False)
    media_sensitive = forms.BooleanField(label=_("Sensitive media?"), required=False)


class FilterForm(forms.Form):
    phrase = forms.CharField(label=_("Word or phrase to filter"))
    context_home = forms.BooleanField(
        label=_("In home timeline"), required=False, initial=True
    )
    context_public = forms.BooleanField(
        label=_("In public timelines"), required=False, initial=True
    )
    context_notes = forms.BooleanField(
        label=_("In notifications"), required=False, initial=True
    )
    context_thread = forms.BooleanField(
        label=_("In thread contexts"), required=False, initial=True
    )
    whole_word = forms.BooleanField(
        label=_("Whole words only"), required=False, initial=True
    )
    expires_in = forms.TypedChoiceField(
        label=_("Expires in"),
        choices=(
            ("", "Never"),
            ("1800", "30 minutes"),
            ("3600", "1 hour"),
            ("21600", "6 hours"),
            ("43200", "12 hours"),
            ("86400", "1 day"),
            ("604800", "1 week"),
        ),
        coerce=int,
        required=False,
    )
