from django import forms
from django.contrib.auth.models import Permission
from .models import Nivel




class NivelForm(forms.ModelForm):
    permissions = forms.ModelMultipleChoiceField(
        queryset=Permission.objects.all(),
        required=False
    )
    
    class Meta:
        model = Nivel
        fields = '__all__'
        widgets = {
            'permissions': forms.SelectMultiple(),
        }
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        if self.instance and self.instance.pk:
            self.fields['permissions'].initial = self._get_initial_permissions()
    
    def _get_initial_permissions(self):
        initial_permissions = []
        for perm in self.instance.permissions:
            permission = Permission.objects.filter(
                codename=perm.get('codename'), 
                content_type__app_label=perm.get('app_label')
            ).first()
            if permission:
                initial_permissions.append(permission.pk)
        #print(f"initial_permissions: {initial_permissions}")
        return initial_permissions
    
    def clean_permissions(self):
        permissions = self.cleaned_data.get('permissions')
        #print(permissions)
        return [
            {'app_label': perm.content_type.app_label, 'codename': perm.codename}
            for perm in permissions
        ] if permissions else []
    
    def save(self, commit=True):
        instance = super().save(commit=False)
        instance.permissions = self.cleaned_data['permissions']
        if commit:
            instance.save()
        return instance
