# -*- coding: utf-8 -*-
from __future__ import unicode_literals, absolute_import

from django.contrib import admin

from .models import (Ente, Mandato, Persona, GruppoConsigliare, Assessore,
                     Consigliere, CommissioneConsigliare)


RANGE_VALIDITA_SECTION = ('Range di validità',
                          {'fields': ('inizio_validita', 'fine_validita')})


class GruppoConsigliareInline(admin.TabularInline):
    fields = ('titolo', 'inizio_validita', 'fine_validita')
    model = GruppoConsigliare
    extra = 1


class AssessoreInline(admin.TabularInline):
    fields = ('persona', 'delega', 'inizio_validita', 'fine_validita')
    model = Assessore
    extra = 1


class ConsigliereInline(admin.TabularInline):
    fields = ('persona', 'gruppoconsigliare', 'capogruppo')
    model = Consigliere
    extra = 1


@admin.register(Persona)
class PersonaAdmin(admin.ModelAdmin):
    fieldsets = (
        ('None', {'fields': ('cognome', 'nome', 'email', 'ente', 'user')}),
        RANGE_VALIDITA_SECTION)
    list_display = ('cognome', 'nome', 'ente', 'user', 'inizio_validita',
                    'fine_validita')
    search_fields = ('cognome', 'nome', 'ente__titolo',)


@admin.register(Ente)
class EnteAdmin(admin.ModelAdmin):
    fieldsets = (
        ('None', {'fields': ('titolo', 'ente_padre')}),
        RANGE_VALIDITA_SECTION)
    list_display = ('titolo', 'ente_padre')


@admin.register(Mandato)
class MandatoAdmin(admin.ModelAdmin):
    fieldsets = (
        ('None', {'fields': ('ente', 'boss', 'vice', 'speacker',
                             'vice_speacker')}),
        RANGE_VALIDITA_SECTION)
    list_display = ('ente', 'inizio_validita', 'fine_validita', 'boss', 'vice',
                    'speacker')
    list_select_related = True
    inlines = [AssessoreInline, GruppoConsigliareInline, ConsigliereInline]


@admin.register(Consigliere)
class ConsigliereAdmin(admin.ModelAdmin):
    fieldsets = (
        ('None', {'fields': ('persona', 'mandato', 'gruppoconsigliare',
                             'capogruppo',)}),
        RANGE_VALIDITA_SECTION)
    list_filter = ('gruppoconsigliare',)
    list_display = ('persona', 'mandato', 'gruppoconsigliare',
                    'capogruppo', 'inizio_validita', 'fine_validita')
    search_fields = ('persona__cognome', 'persona__nome',)


@admin.register(CommissioneConsigliare)
class CommissioneConsigliareAdmin(admin.ModelAdmin):
    fieldsets = (
        ('None', {'fields': ('mandato', 'titolo', 'boss', 'vice',
                             'componenti')}),
    )
    filter_horizontal = ('componenti',)
    list_display = ('titolo', 'mandato', 'boss', 'vice', 'ld_componenti')
    list_filter = ('mandato',)
    search_fields = ('titolo', 'mandato__ente__titolo',)

    def ld_componenti(self, obj):
        """
        :type obj: organigrammi.models.CommissioneConsigliare
        """
        links = ['<a href="{}">{}</a>'.format(
            c.get_absolute_url(), c.persona) for c in obj.componenti.all()]
        return '<br />'.join(links)
    ld_componenti.short_description = 'Componenti'
    ld_componenti.allow_tags = True
    
    def get_search_fields(self, request):
        search_fields = list(super(
            CommissioneConsigliareAdmin, self).get_search_fields(request))
        for field in ['boss', 'vice', 'componenti']:
            search_fields += ['{}__persona__cognome'.format(field),
                              '{}__persona__nome'.format(field)]
        return tuple(set(search_fields))

@@ -908,38 +908,36 @@
 ts = (%0A        (
-'
 None
-'
 , %7B'fields': ('c
@@ -1259,38 +1259,36 @@
 ts = (%0A        (
-'
 None
-'
 , %7B'fields': ('t
@@ -1472,38 +1472,36 @@
 ts = (%0A        (
-'
 None
-'
 , %7B'fields': ('e
@@ -1534,18 +1534,16 @@
 acker',%0A
-  
         
@@ -1924,38 +1924,36 @@
 ts = (%0A        (
-'
 None
-'
 , %7B'fields': ('p
@@ -1985,34 +1985,32 @@
 poconsigliare',%0A
-  
                 
@@ -2301,24 +2301,413 @@
 __nome',)%0A%0A%0A
+@admin.register(Assessore)%0Aclass AssessoreAdmin(admin.ModelAdmin):%0A    fieldsets = (%0A        (None, %7B'fields': ('persona', 'mandato', 'delega',)%7D),%0A        RANGE_VALIDITA_SECTION)%0A    list_filter = ('mandato',)%0A    list_display = ('persona', 'mandato', 'delega',%0A                    'inizio_validita', 'fine_validita')%0A    search_fields = ('persona__cognome', 'persona__nome', 'delega')%0A%0A%0A
 @admin.regis
@@ -2818,14 +2818,12 @@
    (
-'
 None
-'
 , %7B'
@@ -2896,18 +2896,16 @@
         
-  
 'compone
@@ -2957,16 +2957,17 @@
 onenti',
+ 
 )%0A    li
@@ -3402,16 +3402,17 @@
 (links)%0A
+%0A
     ld_c
@@ -3490,20 +3490,16 @@
  = True%0A
-    
 %0A    def

add AssessoreAdmin