from django import forms
from django.contrib.auth.models import User, Group
from django.utils import timezone
from django.db.models import Q
from .models import Interaction
from farmerapp.models import CultureableName
from common.utils import is_supervisor, is_manager
from dal import autocomplete
from contacts.models import ContactPerson


class InteractionForm(forms.ModelForm):
    cultures = forms.ModelMultipleChoiceField(
        queryset=CultureableName.objects.filter(active=True),
        widget=forms.CheckboxSelectMultiple,
        required=True,
        label='Культури'
    )

    class Meta:
        model = Interaction
        fields = [
            'interaction_type',
            'cultures',
            'price',
            'desired_price',
            'basis',
            'comment',
            'next_interaction_date',
            'client_status',
            'assigned_to',
            'contact_person'
        ]
        labels = {
            'interaction_type': 'Тип взаємодії',
            'cultures': 'Культури',
            'price': 'Ціна',
            'desired_price': 'Бажана ціна',
            'basis': 'Базис',
            'comment': 'Коментар',
            'next_interaction_date': 'Дата наступної взаємодії',
            'client_status': 'Статус клієнта',
            'assigned_to': 'Призначено',
            'contact_person': 'Контактна особа'
        }
        widgets = {
            'interaction_type': forms.Select(attrs={'class': 'form-control'}),
            'price': forms.NumberInput(attrs={'class': 'form-control'}),
            'desired_price': forms.NumberInput(attrs={'class': 'form-control'}),
            'basis': forms.Select(attrs={'class': 'form-control'}),
            'comment': forms.Textarea(attrs={'class': 'form-control'}),
            'next_interaction_date': forms.DateTimeInput(attrs={
                'class': 'form-control',
                'type': 'datetime-local',
                'value': timezone.now().strftime('%Y-%m-%dT%H:%M')
            }),
            'client_status': forms.Select(attrs={'class': 'form-control'}),
            'assigned_to': forms.Select(attrs={'class': 'form-control'}),
            'contact_person': autocomplete.ModelSelect2(
                url='contacts:contact-person-autocomplete',
                forward=['farmer'],
                attrs={'class': 'form-control', 'data-placeholder': 'Виберіть контактну особу'}
            )
        }

    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user')
        farmer = kwargs.pop('farmer', None)
        super(InteractionForm, self).__init__(*args, **kwargs)
        if is_supervisor(user):
            manager_group = Group.objects.get(name='Managers')
            self.fields['assigned_to'].queryset = User.objects.filter(groups=manager_group)
            self.fields['assigned_to'].required = False
        else:
            self.fields['assigned_to'].widget = forms.HiddenInput()
            self.fields['assigned_to'].required = False
            self.fields['assigned_to'].initial = None

        self.fields['cultures'].queryset = CultureableName.objects.filter(active=True)

        self.fields['next_interaction_date'].widget = forms.DateTimeInput(attrs={
            'class': 'form-control',
            'type': 'datetime-local',
            'value': timezone.now().strftime('%Y-%m-%dT%H:%M')
        })

        # Якщо потрібно, можна зберегти фермерське господарство для подальшого використання
        self.farmer = farmer