from django import forms
from django_select2 import forms as s2forms
from django.contrib.gis import forms as gis_forms

from developer.models import Developer
from geo_location.models import City, Country
from .models import BuildingType, Development, DevelopmentTranslate, ONHArea, ONHDistrict, ONHPostcode, ONHStation, ONHZone

class CustomOSMWidget(gis_forms.OSMWidget):
    template_name = "custom_gis/openlayers.html"
    default_lat = 1.3521
    default_lon = 103.8198

class MasterDevelopmentEditForm(forms.ModelForm):
    class Meta:
        model = Development
        fields = ['title', "developer", "country", "city", "building_type", "onh_district", "onh_postcode", "onh_area", "onh_zone","onh_station",
                  "is_ready_to_move", "is_sold_out", 'is_featured', "is_active"]
        widgets = {
            'country' : s2forms.ModelSelect2Widget(
                model=Country,
                search_fields=['name__icontains', 'code__icontains'],
                attrs = {"data-minimum-input-length": 0, 'data-placeholder': 'country'},
                max_results=10
            ), 
            'city' : s2forms.ModelSelect2Widget(
                model=City,
                search_fields=['name__icontains'],
                attrs = {"data-minimum-input-length": 0, 'data-placeholder': 'city'},
                max_results=10
            ), 
            'developer' : s2forms.ModelSelect2Widget(
                model=Developer,
                search_fields=['name__icontains'],
                attrs = {"data-minimum-input-length": 0, 'data-placeholder': 'developer'},
                max_results=10
            ), 
            'building_type': s2forms.ModelSelect2MultipleWidget(
                model=BuildingType,
                search_fields=['name__icontains'],
                attrs = {"data-minimum-input-length": 0, 'data-placeholder': 'building type'},
                max_results=10
            ), 
            'onh_district': s2forms.ModelSelect2MultipleWidget(
                model=ONHDistrict,
                search_fields=['name__icontains'],
                attrs = {"data-minimum-input-length": 0, 'data-placeholder': 'district'},
                max_results=10
            ), 
            'onh_postcode': s2forms.ModelSelect2MultipleWidget(
                model=ONHPostcode,
                search_fields=['name__icontains'],
                attrs = {"data-minimum-input-length": 0, 'data-placeholder': 'postcode'},
                max_results=10
            ), 
            'onh_area': s2forms.ModelSelect2MultipleWidget(
                model=ONHArea,
                search_fields=['name__icontains'],
                attrs = {"data-minimum-input-length": 0, 'data-placeholder': 'area'},
                max_results=10
            ), 
            'onh_zone': s2forms.ModelSelect2MultipleWidget(
                model=ONHZone,
                search_fields=['name__icontains'],
                attrs = {"data-minimum-input-length": 0, 'data-placeholder': 'zone'},
                max_results=10
            ), 
            'onh_station': s2forms.ModelSelect2MultipleWidget(
                model=ONHStation,
                search_fields=['name__icontains'],
                attrs = {"data-minimum-input-length": 0, 'data-placeholder': 'station'},
                max_results=10
            )
        }
        error_messages = {}

    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop("request", None)
        super().__init__(*args, **kwargs)
        for field in self.fields.values():
            field.widget.attrs["autocomplete"] = "off"
            field.widget.attrs["placeholder"] = field.label

    required_css_class = 'required'

    def clean(self):
        cleaned_data = self.cleaned_data
        return cleaned_data
    
class MasterDevelopmentTranslateEditForm(forms.ModelForm):
    class Meta:
        model = DevelopmentTranslate
        fields = ["title", "summary", "description", "features_description", "neighborhood"]
        widgets = {}
        
    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop("request", None)
        super().__init__(*args, **kwargs)
        for field in self.fields.values():
            field.widget.attrs["autocomplete"] = "off"
            field.widget.attrs["placeholder"] = field.label

    required_css_class = 'required'

    def clean(self):
        cleaned_data = self.cleaned_data
        return cleaned_data
        