from django.contrib import admin
from django import forms
from django.contrib.gis.admin import OSMGeoAdmin
from django.contrib.contenttypes.admin import GenericStackedInline

from utils.widgets import AdminImageWidget, LGEntryForm
from .models import Entry, HomepageCurrator, Home #, RelatedPost

from photos.forms import GalleryForm
from photos.models import LuxImage
from utils.util import get_latlon


#@admin.register(RelatedPost)
#class RelatedPostAdmin(admin.ModelAdmin):
#    pass


@admin.register(Entry)
class EntryAdmin(OSMGeoAdmin):
    form = LGEntryForm

    def get_queryset(self, request):
        test_model_qs = super(EntryAdmin, self).get_queryset(request)
        test_model_qs = test_model_qs.prefetch_related('related').prefetch_related('books')

        return test_model_qs

    def render_change_form(self, request, context, *args, **kwargs):
        #context['adminform'].form.fields['featured_image'].queryset = LuxImage.objects.all()[:200]
        return super(EntryAdmin, self).render_change_form(request, context, *args, **kwargs)

    def formfield_for_dbfield(self, db_field, **kwargs):
        if db_field.name == 'thumbnail' or db_field.name == 'image':
            field = forms.FileField(widget=AdminImageWidget)
        elif db_field.name == 'meta_description':
            field = forms.CharField(widget=forms.Textarea(attrs={'rows': 4, 'cols': 75}))
            field.required = False
        else:
            field = super(EntryAdmin, self).formfield_for_dbfield(db_field, **kwargs)
        return field

    list_display = ('title', 'pub_date', 'template_name', 'status', 'location', 'photo_gallery')
    search_fields = ['title', 'body_markdown']
    prepopulated_fields = {"slug": ('title',)}
    list_filter = ('pub_date', 'enable_comments', 'status', 'location__state__country__lux_region')
    filter_horizontal = ('field_notes', 'books', 'related')
    fieldsets = (
        ('Entry', {
            'fields': (
                'title',
                'subtitle',
                'body_markdown',
                ('pub_date', 'status'),
                'slug',
                'point'
            ),
            'classes': (
                'show',
                'extrapretty',
                'wide'
            )
        }
        ),
        ('Formatting data', {
            'fields': (
                'dek',
                'meta_description',
                'template_name',
                'enable_comments',
                'featured_image',
            ),
        }),
        ('Extra', {
            'fields': (
                'field_notes',
                #'old_field_notes',
                'books',
                'related',
                #'oldrelated',
            ),
            'classes': (
                'collapse',
                'extrapretty',
                'wide'
            )
        }),
    )
    # options for OSM map Using custom ESRI topo map
    lat, lon = get_latlon()
    default_lon = lon
    default_lat = lat
    default_zoom = 10
    units = True
    scrollable = False
    map_width = 700
    map_height = 425
    map_template = 'gis/admin/osm.html'
    openlayers_url = '/static/admin/js/OpenLayers.js'

    class Media:
        js = ('image-loader.js', 'next-prev-links.js')
        css = {
            "all": ("my_styles.css",)
        }


@admin.register(HomepageCurrator)
class HomepageCurratorAdmin(admin.ModelAdmin):
    form = GalleryForm
    filter_horizontal = ('popular',)

    class Media:
        js = ('image-loader.js', 'next-prev-links.js')
        css = {
            "all": ("my_styles.css",)
        }


@admin.register(Home)
class HomeAdmin(admin.ModelAdmin):
    form = LGEntryForm
    filter_horizontal = ('popular',)

    class Media:
        js = ('image-loader.js', 'next-prev-links.js')
        css = {
            "all": ("my_styles.css",)
        }