import datetime

from django import forms
from django.db import models

from src.core import storage_backends

from src.core import models as core_models
from .models import Area, Building, Certificate, Company, Energy, AreaDocument, EnergyDocument


class CompanyForm(forms.ModelForm):
    name = core_models.text_input()
    trading_as = core_models.text_input()
    registration_number = core_models.text_input()
    vat_number = core_models.text_input()
    sic_code = core_models.integer_input()

    class Meta:
        model = Company
        fields = ['name', 'trading_as', 'registration_number', 'vat_number', 'sic_code']


class BuildingForm(forms.ModelForm):
    company = forms.ModelChoiceField(queryset=Company.objects.all(), widget=forms.HiddenInput())

    name = core_models.text_input()
    address_line_1 = core_models.text_input(label='Street address')
    address_line_2 = core_models.text_input(False, label='Apartment, suite, etc.')
    address_line_3 = core_models.text_input(False, label='Suburb')
    address_line_4 = core_models.text_input(label='City')
    address_line_5 = core_models.text_input(label='Postal code')
    building_owner = core_models.text_input(False)
    number_floors = core_models.integer_input()
    occupancy_rate = core_models.number_input()
    occupancy_class = core_models.select_input(Building.OccupancyClass.choices)
    climatic_zone = core_models.select_input(Building.ClimaticZone.choices)
    cadastral_info = core_models.text_input()
    building_plan_approval_date = core_models.date_input(False)
    occupancy_certificate_date = core_models.date_input(False)
    year_construction = core_models.year_input()
    year_last_renovation = core_models.year_input()

    class Meta:
        model = Building
        fields = [
            'company',
            'name',
            'address_line_1',
            'address_line_2',
            'address_line_3',
            'address_line_4',
            'address_line_5',
            'building_owner',
            'number_floors',
            'occupancy_rate',
            'occupancy_class',
            'climatic_zone',
            'cadastral_info',
            'building_plan_approval_date',
            'occupancy_certificate_date',
            'year_construction',
            'year_last_renovation',
        ]


class AreaForm(forms.ModelForm):
    building = forms.ModelChoiceField(queryset=Building.objects.all(), widget=forms.HiddenInput())

    date = core_models.date_input()
    total_floor_area = core_models.number_input()
    excluded_floor_area = core_models.number_input()
    nett_floor_area = core_models.number_input()
    supporting_doc = core_models.file_input(label='Supporting documentation', multiple_files=True)

    class Meta:
        model = Area
        fields = '__all__'
        widgets = {
            'files': forms.ClearableFileInput(attrs={'multiple': True}),
        }


class EnergyForm(forms.ModelForm):
    building = forms.ModelChoiceField(queryset=Building.objects.all(), widget=forms.HiddenInput())

    source = core_models.select_input(Energy.Sources.choices)
    date = core_models.date_input()
    consumption = core_models.number_input(True)
    exclude = core_models.check_input()
    supporting_doc = core_models.file_input(label='Supporting documentation', multiple_files=True)

    class Meta:
        model = Energy
        fields = ['building', 'source', 'date', 'consumption', 'supporting_doc', 'exclude']
        widgets = {
            'files': forms.ClearableFileInput(attrs={'multiple': True}),
        }


class CertificateForm(forms.ModelForm):
    building = forms.ModelChoiceField(queryset=Building.objects.all(), widget=forms.HiddenInput())
    end_date = core_models.date_input()
    date_of_issue = forms.DateField(
        widget=forms.DateInput(
            attrs={
                'data-datepicker': '',
                'class': 'form-control',
                'placeholder': 'yyyy-mm-dd',
                'value': datetime.datetime.now().strftime('%Y-%m-%d'),
            },
        ),
    )

    class Meta:
        model = Certificate
        fields = ['building', 'end_date', 'date_of_issue']
