from django import forms
from django.contrib.auth.models import User
from apps.notifications.models import Notification
from apps.funcionario.models import UsuarioFuncionario  # Importando o modelo correto

class NotificationForm(forms.ModelForm):
    send_to_all = forms.BooleanField(
        required=False, 
        label="Enviar para todos", 
        widget=forms.CheckboxInput(attrs={'class': 'form-check-input', 'id': 'sendToAll'})
    )
    choose_user = forms.BooleanField(
        required=False, 
        label="Escolher Usuário", 
        widget=forms.CheckboxInput(attrs={'class': 'form-check-input', 'id': 'chooseUser'})
    )
    recipient = forms.ModelChoiceField(
        queryset=User.objects.all(), 
        required=False, 
        label="Destinatário",
        widget=forms.Select(attrs={'class': 'form-select', 'id': 'recipientSelect'})
    )

    class Meta:
        model = Notification
        fields = ['message', 'notification_type', 'recipient']
        labels = {
            'message': 'Mensagem',
            'notification_type': 'Tipo de Notificação',
            'recipient': 'Destinatário'
        }
        widgets = {
            'message': forms.Textarea(attrs={'class': 'form-control'}),
            'notification_type': forms.Select(attrs={'class': 'form-select'}),
        }

    def __init__(self, *args, **kwargs):
        super(NotificationForm, self).__init__(*args, **kwargs)
        self.fields['recipient'].queryset = User.objects.all()
        self.fields['recipient'].label_from_instance = self.get_user_full_name

    def get_user_full_name(self, user):
        try:
            # Busque o relacionamento através de UsuarioFuncionario
            usuario_funcionario = UsuarioFuncionario.objects.get(usuario=user)
            funcionario = usuario_funcionario.funcionario
            return funcionario.nome_completo  # Retorne o nome completo do funcionário
        except UsuarioFuncionario.DoesNotExist:
            return user.username  # Retorna o username como fallback
