from django.contrib import admin
from django.contrib import messages
from reversion.admin import VersionAdmin
from django.utils.safestring import mark_safe
from django.utils.html import escape

from .models import Prednaska, Seznam, STAV_NAVRH
from soustredeni.models import Soustredeni


class Seznam_PrednaskaInline(admin.TabularInline):
	model = Prednaska.seznamy.through
	extra = 0

	def prednaska__nazev(self, obj):
		return mark_safe(
			u"<a href='/admin/prednasky/prednaska/{}'>{}</a>".format(
				obj.prednaska.id,
				escape(obj.prednaska.nazev)
			)
		)

	def prednaska__popis(self, obj):
		return mark_safe(
			u"<div style='width: 200px'>{}</div>".format(
				escape(obj.prednaska.popis)
			)
		)

	def prednaska__anotace(self, obj):
		return obj.prednaska.anotace

	def prednaska__org(self, obj):
		return obj.prednaska.org

	def prednaska__obor(self, obj):
		return obj.prednaska.obor

	prednaska__nazev.short_description = u'Přednáška'
	prednaska__popis.short_description = u'Popis pro orgy'
	prednaska__anotace.short_description = u'Anotace'
	prednaska__org.short_description = u'Org'
	prednaska__obor.short_description = u'Obor'

	readonly_fields = [
		'prednaska__nazev',
		'prednaska__obor',
		'prednaska__org',
		'prednaska__popis',
		'prednaska__anotace',
	]
	exclude = ['prednaska']

	def has_add_permission(self, req, obj): return False


class SeznamAdmin(VersionAdmin):
	list_display = ['soustredeni', 'stav']
	inlines = [Seznam_PrednaskaInline]

admin.site.register(Seznam, SeznamAdmin)


class PrednaskaAdmin(VersionAdmin):
	list_display = ['nazev', 'org', 'obor']
	list_filter = ['org', 'obor']
	search_fields = []
	filter_horizontal = ('seznamy', )

	actions = ['move_to_soustredeni']

	def move_to_soustredeni(self, request, queryset):
		sous = Soustredeni.objects.first()
		seznam = Seznam.objects.filter(soustredeni=sous, stav=STAV_NAVRH)
		if len(seznam) == 0:
			self.message_user(
				request,
				u"Není definován seznam pro aktuální soustředění, "
				u"nic se neprovedlo",
				messages.ERROR
			)
			return
		seznam = seznam[0]
		for prednaska in queryset:
			prednaska.seznamy.add(seznam)
			prednaska.save()

		self.message_user(
			request,
			u"Vybrané přednášky ({}) přidány jako návrhy na nejbližší "
			u"soustředění".format(len(queryset))
		)

	move_to_soustredeni.short_description = (
		u"Přidat přednášky do návrhu na nejbližší soustředění"
	)


admin.site.register(Prednaska, PrednaskaAdmin)