#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(),
#         widget=forms.SelectMultiple,
#         required=False
#     )
    
#     class Meta:
#         model = Nivel
#         fields = ['name', 'permissions']
    
#     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)
#         return initial_permissions
    
#     def clean_permissions(self):
#         permissions = self.cleaned_data.get('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



from django import forms
from panel.models import Favorito, ContatoCliente
from v1.models import Types, PropertiesNested
from accounts.models import Cliente

from django import forms
from panel.models import Favorito
from v1.models import Types, PropertiesNested
from accounts.models import Cliente

class FavoritoAdminForm(forms.ModelForm):
    class Meta:
        model = Favorito
        fields = "__all__"

    def clean_tipo_imovel(self):
        tipo_imovel = self.cleaned_data.get("tipo_imovel")

        if isinstance(tipo_imovel, Types):  # ✅ Already a Types instance
            return tipo_imovel

        if isinstance(tipo_imovel, int) or str(tipo_imovel).isdigit():  # ✅ Convert ID to instance
            try:
                return Types.objects.get(type_id=int(tipo_imovel))
            except Types.DoesNotExist:
                raise forms.ValidationError("Tipo Imóvel not found.")

        raise forms.ValidationError("Invalid Tipo Imóvel ID.")

    def clean_imovel(self):
        imovel = self.cleaned_data.get("imovel")

        if isinstance(imovel, PropertiesNested):  # ✅ Already an object
            return imovel

        if isinstance(imovel, int) or str(imovel).isdigit():  # ✅ Convert ID to instance
            try:
                return PropertiesNested.objects.get(property_id=int(imovel))
            except PropertiesNested.DoesNotExist:
                raise forms.ValidationError("Imóvel not found.")

        raise forms.ValidationError("Invalid Imóvel ID.")

    def clean_cliente(self):
        cliente = self.cleaned_data.get("cliente")

        if isinstance(cliente, Cliente):  # ✅ Already an object
            return cliente

        if isinstance(cliente, str):  # ✅ Convert ID to instance
            try:
                return Cliente.objects.get(id=cliente)
            except Cliente.DoesNotExist:
                raise forms.ValidationError("Cliente not found.")

        raise forms.ValidationError("Invalid Cliente ID.")





    


class ContatoClienteAdminForm(forms.ModelForm):
    class Meta:
        model = ContatoCliente
        fields = "__all__"

    def clean_tipo_imovel(self):
        tipo_imovel_id = self.cleaned_data.get("tipo_imovel")
        if tipo_imovel_id:
            return Types.objects.get(type_id=tipo_imovel_id)
        return None

    def clean_imovel(self):
        imovel_id = self.cleaned_data.get("imovel")
        if imovel_id:
            return PropertiesNested.objects.get(property_id=imovel_id)
        return None

    def clean_cliente(self):
        cliente_id = self.cleaned_data.get("cliente")
        if cliente_id:
            return Cliente.objects.get(id=cliente_id)
        return None