"""
Author: Michel Peltriaux
Created on: 08.01.25

"""
from django import forms
from django.utils.translation import gettext_lazy as _

from api.models import APIUserToken
from konova.forms.modals import BaseModalForm
from konova.utils.mailer import Mailer


class NewAPITokenModalForm(BaseModalForm):
    confirm = forms.BooleanField(
        label=_("Confirm"),
        label_suffix=_(""),
        widget=forms.CheckboxInput(),
        required=True,
    )

    def __init__(self, *args, **kwargs):
        self.template = "modal/modal_form.html"
        super().__init__(*args, **kwargs)
        self.form_title = _("Generate API Token")

        self.form_caption = ""
        if self.__user_has_api_token():
            self.form_caption = _("You are about to create a new API token. The existing one will not be usable afterwards.")
            self.form_caption += "\n"
        self.form_caption += _("A new token needs to be validated by an administrator!")
        # Disable automatic w-100 setting for this type of modal form. Looks kinda strange
        self.fields["confirm"].widget.attrs["class"] = ""

    def __user_has_api_token(self):
        return self.instance.api_token is not None

    def save(self):
        user = self.instance
        if user.api_token is not None:
            user.api_token.delete()
        user.api_token = APIUserToken.objects.create()
        user.save()

        mailer = Mailer()
        mailer.send_mail_verify_api_token(user)

        return user.api_token