#!/usr/bin/env python
# -*- coding: utf-8 -*-
from django import forms
from Piscix.middleware import get_current_user
import models
from usuarios import models as usuarios
from exile_ui.widgets import AdminImageWidget, MapWidget
from django_autocomplete.widgets import AutocompleteWidget
from django_select2.forms import Select2Widget


class TipoReporteForm(forms.ModelForm):

    class Meta:
        model = models.TipoReporte
        exclude = ()
    # end class
# end class


class ReporteForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(ReporteForm, self).__init__(*args, **kwargs)
        user = get_current_user()
        cliente = usuarios.Cliente.objects.filter(id=user.id)
        if cliente:
            self.fields['piscina'].queryset = usuarios.Piscina.objects.filter(
                casa__cliente=cliente)
        # end if
    # end class

    class Meta:
        model = models.Reporte
        fields = ('nombre', 'descripcion', 'piscina', 'tipo_de_reporte')
        widgets = {
            "piscina": Select2Widget,
            "tipo_de_reporte": Select2Widget
        }
    # end class

    def save(self, commit=True):
        user = get_current_user()
        reporte = super(ReporteForm, self).save(commit=False)
        reporte.usuario = user
        if reporte.tipo_de_reporte.tipo_de_cierre == 1:
            reporte.estado = True
        # end if
        reporte.save()
        reporte.numero = "0%d0%d0%d" % (
            reporte.piscina.pk, reporte.tipo_de_reporte.pk, reporte.pk)
        reporte.save()
        return reporte
    # end defreporte
# end class


class ReporteSupraForm(forms.ModelForm):

    class Meta:
        model = models.Reporte
        exclude = ('usuario',)
    # end class

    def save(self, commit=True):
        user = get_current_user()
        reporte = super(ReporteSupraForm, self).save(commit=False)
        reporte.usuario = user
        if reporte.tipo_de_reporte.tipo_de_cierre == 1:
            reporte.estado = True
        # end if
        reporte.save()
        return reporte
    # end defreporte
# end class


class ReporteEditForm(forms.ModelForm):
    mapa = forms.CharField(required=False)

    def __init__(self, *args, **kwargs):
        super(ReporteEditForm, self).__init__(*args, **kwargs)
        user = get_current_user()
        gps1 = None
        gps2 = None
        if self.instance.piscina.casa.latitud and self.instance.piscina.casa.longitud:
            gps1 = "%s,%s" % (self.instance.piscina.casa.latitud,
                              self.instance.piscina.casa.longitud, )
        # end if
        if self.instance.latitud and self.instance.longitud:
            gps2 = "%s,%s" % (self.instance.latitud, self.instance.longitud, )
        # end if
        self.fields['mapa'].widget = MapWidget(gps1=gps1, gps2=gps2, )
        cliente = usuarios.Cliente.objects.filter(id=user.id)
        widget = self.fields['piscina'].widget
        self.fields['piscina'].widget.widget = AutocompleteWidget(
            model=usuarios.Piscina,
            list_display=['nombre'],
            search_fields=['nombre', 'casa__cliente__first_name',
                           'casa__cliente__last_name'],
            format_data=''
        )
        if cliente:
            self.fields['piscina'].queryset = usuarios.Piscina.objects.filter(
                casa__cliente=cliente)
        # end if
    # end def

    class Meta:
        model = models.Reporte
        fields = ('nombre', 'descripcion',
                  'tipo_de_reporte', 'piscina', 'estado', 'resend')
    # end class

    def save(self, commit=True):
        reporte = super(ReporteEditForm, self).save(commit=False)
        if reporte.tipo_de_reporte.tipo_de_cierre == 1:
            reporte.estado = True
        # end if
        reporte.save()
        return reporte
    # end defreporte
# end class


class FotoReporteForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(FotoReporteForm, self).__init__(*args, **kwargs)
        widget = self.fields['reporte'].widget
        self.fields['reporte'].widget.widget = AutocompleteWidget(
            model=models.Reporte,
            list_display=['nombre'],
            search_fields=['nombre'],
            format_data='%(nombre)s'
        )
        user = get_current_user()
        if not user.is_superuser:
            self.fields['reporte'].queryset = models.Reporte.objects.filter(
                usuario=user)
        # end def
    # end def

    def clean_url(self):
        imagen = self.cleaned_data.get('url', False)
        if imagen:
            if hasattr(imagen, '_size') and imagen._size > 1 * 1024 * 1024:
                raise forms.ValidationError(
                    "El tamaño de la imagen no puede ser superior a 1 mega")
            # end if
            return imagen
        # end if
    # end def

    class Meta:
        model = models.FotoReporte
        exclude = ()
        widgets = {
            'url': AdminImageWidget,
        }
    # end class
# end class


class RespuestaForm(forms.ModelForm):

    class Meta:
        model = models.Respuesta
        fields = ('mensaje',)
    # end class

    def save(self, commit=True):
        user = get_current_user()
        respuesta = super(RespuestaForm, self).save(commit=False)
        respuesta.usuario = user
        respuesta.save()
        return respuesta
    # end def
# end class


class RespuestaEditForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(RespuestaEditForm, self).__init__(*args, **kwargs)
        if self.instance.pk:
            self.fields['mensaje'].widget.attrs['readonly'] = 'readonly'
    # end def

    class Meta:
        model = models.Respuesta
        fields = ('usuario', 'mensaje')
    # end class

    def save(self, commit=True):
        user = get_current_user()
        respuesta = super(RespuestaEditForm, self).save(commit=False)
        respuesta.usuario = user
        respuesta.save()
        return respuesta
    # end def
# end class

# Formulario para el servicio, no tocar ¬¬


class RespuestaFormS(forms.ModelForm):

    class Meta:
        model = models.Respuesta
        fields = ('mensaje', 'reporte')
    # end class

    def save(self, commit=True):
        user = get_current_user()
        respuesta = super(RespuestaFormS, self).save(commit=False)
        respuesta.usuario = user
        respuesta.save()
        return respuesta
    # end def
# end class


class RecordatorioForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(RecordatorioForm, self).__init__(*args, **kwargs)
        widget = self.fields['reporte'].widget
        self.fields['reporte'].widget.widget = AutocompleteWidget(
            model=models.Reporte,
            list_display=['nombre'],
            search_fields=['nombre'],
            format_data='%(nombre)s'
        )
    # end def

    class Meta:
        model = models.Recordatorio
        exclude = ('usuario', )
    # end class

    def save(self, commit=True):
        user = get_current_user()
        respuesta = super(RecordatorioForm, self).save(commit=False)
        respuesta.usuario = user
        respuesta.save()
        return respuesta
    # end def
# end class


class ReporteInformativoForm(forms.ModelForm):

    class Meta:
        model = models.ReporteInformativo
        exclude = ('usuario', 'latitud', 'longitud')
    # end class

    def save(self, commit=True):
        user = get_current_user()
        reporte = super(ReporteInformativoForm, self).save(commit=False)
        reporte.usuario = user
        reporte.save()
        return reporte
    # end def
# end class


class ReporteInformativoEditForm(forms.ModelForm):
    mapa = forms.CharField(required=False)

    def __init__(self, *args, **kwargs):
        super(ReporteInformativoEditForm, self).__init__(*args, **kwargs)
        gps1 = None
        gps2 = None
        if self.instance.latitud and self.instance.longitud:
            gps1 = "%s,%s" % (self.instance.latitud, self.instance.longitud, )
        # end if
        self.fields['mapa'].widget = MapWidget(gps1=gps1, gps2=gps2, )
    # end def

    class Meta:
        model = models.ReporteInformativo
        exclude = ('usuario', 'latitud', 'longitud')
    # end class

# end class


class ReporteInformativoSupraForm(forms.ModelForm):

    class Meta:
        model = models.ReporteInformativo
        exclude = ('usuario',)
    # end class

    def save(self, commit=True):
        user = get_current_user()
        reporte = super(ReporteInformativoSupraForm, self).save(commit=False)
        reporte.usuario = user
        reporte.save()
        return reporte
    # end def
# end class
