"""passbook OIDC IDP Forms"""

from django import forms
from oauth2_provider.generators import (generate_client_id,
                                        generate_client_secret)
from oidc_provider.models import Client

from passbook.providers.oidc.models import OpenIDProvider


class OIDCProviderForm(forms.ModelForm):
    """OpenID Client form"""

    def __init__(self, *args, **kwargs):
        # Correctly load data from 1:1 rel
        if 'instance' in kwargs and kwargs['instance']:
            kwargs['instance'] = kwargs['instance'].oidc_client
        super().__init__(*args, **kwargs)
        self.fields['client_id'].initial = generate_client_id()
        self.fields['client_secret'].initial = generate_client_secret()

    def save(self, *args, **kwargs):
        response = super().save(*args, **kwargs)
        # Check if openidprovider class instance exists
        if not OpenIDProvider.objects.filter(oidc_client=self.instance).exists():
            OpenIDProvider.objects.create(oidc_client=self.instance)
        return response

    class Meta:
        model = Client
        fields = [
            'name', 'client_type', 'client_id', 'client_secret', 'response_types',
            'jwt_alg', 'reuse_consent', 'require_consent', '_redirect_uris', '_scope'
        ]
        # exclude = ['owner', 'website_url', 'terms_url', 'contact_email', 'logo', ]
        labels = {
            'client_secret': "Client Secret"
        }