from django.contrib import admin
from django.contrib.gis.admin import OSMGeoAdmin

from projects.models.base import Project
from projects.models.fiveby import FiveBy
from projects.models.natparks import NationalParks
from projects.models.gifs import AnimatedGif
from projects.models.self_experiments import Experiment


class ProjectAdmin(OSMGeoAdmin):
    list_display = ('title', 'pub_date', 'status',)
    search_fields = ['title', 'body_markdown']
    prepopulated_fields = {"slug": ('title',)}
    list_filter = ('pub_date', 'status')
    fieldsets = (
        ('Project', {
            'fields': (
                'title',
                'subtitle',
                'lede',
                'pub_date',
                'model_name',
                ('status', 'image'),
                'slug',
            ),
            'classes': (
                'show',
                'extrapretty',
                'wide'
            )
        }),
    )

    class Media:
        js = ['/media/admin/custom/model.js']


class FiveByAdmin(OSMGeoAdmin):
    list_display = ('title', 'pub_date', 'status',)
    search_fields = ['title']
    prepopulated_fields = {"slug": ('title',)}
    list_filter = ('pub_date', 'status')
    fieldsets = (
        ('Project', {'fields': ('title', 'lede', 'pub_date', 'status', ('image', 'videoh264', 'videoogg'), 'slug', ('vimeo_link', 'youtube_link'), ('point', 'location', 'region')), 'classes': ('show', 'extrapretty', 'wide')}),
    )

    # options for OSM map Using custom ESRI topo map
    default_lon = -9285175
    default_lat = 4025046
    default_zoom = 6
    units = True
    scrollable = False
    map_width = 700
    map_height = 425
    map_template = 'gis/admin/osm.html'


class NationalParksAdmin(OSMGeoAdmin):
    list_display = ('unit_name', 'type', 'state', 'name', 'visited', 'size')
    list_filter = ('state', 'type')
    search_fields = ['name']
    fieldsets = (
        ('Project', {
            'fields': (
                'name',
                'tag_line',
                ('state', 'visited'),
                'dek',
                'date_visited_begin',
                'date_visited_end',
                'mpoly',
                'image',
                ('post', 'gallery'),
                ('url', 'size', 'fee', 'camping_fee', 'date_park_created'),
                'zoom'
            ),
            'classes': (
                'show',
                'extrapretty',
                'wide'
            )
        }),
    )

    # options for OSM map Using custom ESRI topo map
    default_lon = -9285175
    default_lat = 4025046
    default_zoom = 6
    units = True
    scrollable = False
    map_width = 700
    map_height = 425
    map_template = 'gis/admin/osm.html'


class AnimatedGifAdmin(admin.ModelAdmin):
    list_display = ('title', 'date_created')
    search_fields = ['title']
    fieldsets = (
        (None, {
            'fields': (
                'title',
                'gif',
                'date_created',
                'slug',
                'music_ogg',
                'music_mp3'
            )
        }),
    )


class ExperimentAdmin(admin.ModelAdmin):
    list_display = ('title', 'date_start', 'date_end_projected', 'days_remaining')
    search_fields = ['title']
    fieldsets = (
        (None, {
            'fields': (
                'title',
                'slug',
                'body_markdown',
                ('date_start', 'duration', 'date_end_projected'),
                'date_end_actual',
                'status'
            )
        }),
    )


admin.site.register(Experiment, ExperimentAdmin)
admin.site.register(AnimatedGif, AnimatedGifAdmin)
admin.site.register(Project, ProjectAdmin)
admin.site.register(FiveBy, FiveByAdmin)
admin.site.register(NationalParks, NationalParksAdmin)