from django import forms
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from pretix.base.forms import SettingsForm
from pretix.base.models import Event
from pretix.control.views.event import (
    EventSettingsFormView,
    EventSettingsViewMixin,
)


class ServiceFeeSettingsForm(SettingsForm):
    service_fee_abs = forms.DecimalField(label=_("Fixed fee per order"), required=False)
    service_fee_percent = forms.DecimalField(
        label=_("Percentual fee per order"),
        help_text=_(
            "Percentage of the order total. Note that this percentage will currently only "
            "be calculated on the summed price of sold tickets, not on other fees like e."
            "g. shipping fees, if there are any."
        ),
        required=False,
    )
    service_fee_per_ticket = forms.DecimalField(
        label=_("Fixed fee per ticket"),
        help_text=_(
            "This fee will be added for each ticket sold, except for free items and addons."
        ),
        required=False,
    )
    service_fee_skip_if_gift_card = forms.BooleanField(
        label=_("Do not charge service fee on tickets paid with gift cards"),
        help_text=_(
            "If a gift card is used for the payment, the percentual fees will be applied on the value of the "
            "tickets minus the value of the gift cards. All fixed fees will be dropped if the tickets can "
            "be paid with gift cards entirely. This only works if the gift card is redeemd when the order is "
            "submitted, not if it's used to pay an unpaid order later."
        ),
        required=False,
    )
    service_fee_skip_addons = forms.BooleanField(
        label=_("Do not charge per-ticket service fee on add-on products"),
        required=False,
    )
    service_fee_skip_non_admission = forms.BooleanField(
        label=_("Do not charge per-ticket service fee on non-admission products"),
        required=False,
    )
    service_fee_skip_free = forms.BooleanField(
        label=_("Do not charge per-ticket service fee on free products"),
        help_text=_(
            "Note that regardless of this setting, a per-ticket fee will not be charged if the entire order is free."
        ),
        required=False,
    )
    service_fee_split_taxes = forms.BooleanField(
        label=_(
            "Split taxes proportionate to the tax rates and net values of the ordered products."
        ),
        help_text=_(
            "If not split based on ordered products, the tax rate falls back to the event’s base tax rate or no tax, if none is given."
        ),
        required=False,
    )

    service_fee_abs_resellers = forms.DecimalField(
        label=_("Fixed fee per order"), required=False
    )
    service_fee_percent_resellers = forms.DecimalField(
        label=_("Percentual fee per order"),
        help_text=_(
            "Percentage of the order total. Note that this percentage will currently only "
            "be calculated on the summed price of sold tickets, not on other fees like e."
            "g. shipping fees, if there are any."
        ),
        required=False,
    )
    service_fee_per_ticket_resellers = forms.DecimalField(
        label=_("Fixed fee per ticket"),
        required=False,
        help_text=_(
            "This fee will be added for each ticket sold, except for free items and addons."
        ),
    )


class SettingsView(EventSettingsViewMixin, EventSettingsFormView):
    model = Event
    form_class = ServiceFeeSettingsForm
    template_name = "pretix_servicefees/settings.html"
    permission = "can_change_event_settings"

    def get_success_url(self) -> str:
        return reverse(
            "plugins:pretix_servicefees:settings",
            kwargs={
                "organizer": self.request.event.organizer.slug,
                "event": self.request.event.slug,
            },
        )