from django import forms

from home.geo.form_mixins import JobLocationFormMixin, normalize_location_post_data

from .models import Job


class JobAdminForm(JobLocationFormMixin, forms.ModelForm):
    """Django admin job form with the same structured location fields as Post a Job."""

    class Meta:
        model = Job
        fields = '__all__'

    class Media:
        js = ('js/job-location-picker.js',)

    def __init__(self, *args, **kwargs):
        if kwargs.get('data'):
            kwargs['data'] = normalize_location_post_data(kwargs['data'])
        elif args:
            args = (normalize_location_post_data(args[0]), *args[1:])
        super().__init__(*args, **kwargs)
        self.init_job_location_fields()
        if 'location' in self.fields:
            self.fields['location'].widget = forms.HiddenInput()
            self.fields['location'].required = False
        if 'location_regions' in self.fields:
            self.fields['location_regions'].widget = forms.HiddenInput()
            self.fields['location_regions'].required = False

    def clean(self):
        cleaned_data = super().clean()
        return self.apply_job_location_validation(cleaned_data)

    def save(self, commit=True):
        job = super().save(commit=False)
        self.persist_structured_location(job)
        if commit:
            job.save()
        return job
