import datetime, django
from django.shortcuts import get_object_or_404, render
from django.http import HttpResponse
from django.urls import reverse
from django.views import generic
from django.utils.encoding import force_text

from .models import Problem, Cislo, Reseni, Nastaveni, Rocnik, Soustredeni
#from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjakziva
from .ovvpfile import OvvpFile
from seminar import views
from seminar.utils import aktivniResitele

class ExportIndexView(generic.View):
	def get(self, request):
		ls = []
		for r in Rocnik.objects.filter(exportovat = True):
	    		url = reverse('seminar_export_rocnik', kwargs={'prvni_rok': r.prvni_rok})
	    		ls.append(url.split('/')[-1])
		for s in Soustredeni.objects.filter(exportovat = True):
			url = reverse('seminar_export_sous', kwargs={'datum_zacatku': s.datum_zacatku.isoformat()})
			ls.append(url.split('/')[-1])

		return HttpResponse('\n'.join(ls) + '\n', content_type='text/plain; charset=utf-8')


def default_ovvpfile(event, rocnik):
	of = OvvpFile()
	of.headers['version'] = '1'
	of.headers['event'] = event
	of.headers['year'] = force_text(rocnik.prvni_rok)
	of.headers['date'] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
	of.headers['id-scope'] = 'mam'
	of.headers['id-generation'] = '1'
	return of


class ExportSousView(generic.View):

	def get(self, request, datum_zacatku=None):
		try:
		    dz = django.utils.dateparse.parse_date(datum_zacatku)
		except:
		    dz = None
		if dz is None:
		    raise django.http.Http404()

		s = get_object_or_404(Soustredeni, datum_zacatku=dz, exportovat=True)

		akce = {Soustredeni.TYP_JARNI: 'MaM.sous.jaro',
			Soustredeni.TYP_PODZIMNI: 'MaM.sous.podzim',
			Soustredeni.TYP_VIKEND: 'MaM.vikend',
			}[s.typ]

		of = default_ovvpfile(akce, s.rocnik)
		of.headers['x-event-begin'] = s.datum_zacatku.isoformat()
		of.headers['x-event-end'] = s.datum_konce.isoformat()
		of.headers['x-event-location'] = s.misto
		of.headers['comment'] = u'MaM-Web export ucastniku soustredeni v {x-event-location} od {x-event-begin} do {x-event-end}'.format(**of.headers)
		of.columns = ['id', 'name', 'surname', 'gender', 'email', 'end-year', 'school', 'school-name']
	 
		for u in s.ucastnici.all():
			of.rows.append(u.export_row())
	
		return of.to_HttpResponse()
	
# POZOR! Předělání na nový model neotestováno v reálu (ale zase jen drobné změny)
class ExportRocnikView(generic.View):

	def get(self, request, prvni_rok=None):
		try:
		    pr = int(prvni_rok)
		except:
		    pr = None
		if pr is None:
		    raise django.http.Http404()

		rocnik = get_object_or_404(Rocnik, prvni_rok=pr, exportovat=True)
		cislo = rocnik.posledni_zverejnena_vysledkovka_cislo()
		resitele = aktivniResitele(cislo, True)
		slovnik_body = views.secti_body_za_rocnik(cislo, resitele)
		_, setrizeni_resitele, setrizene_body = views.setrid_resitele_a_body(slovnik_body)

		of = default_ovvpfile('MaM.rocnik', rocnik)
		of.headers['comment'] = u'MaM-Web export aktivnich resitelu rocniku {rocnik} do cisla {cislo}'.format(rocnik=rocnik, cislo=cislo)
		of.columns = ['id', 'name', 'surname', 'gender', 'born', 'email', 'end-year',
			'street', 'town', 'postcode', 'country', 'spam-flag', 'spam-date',
			'school', 'school-name', 'points', 'rank',]
	
		# počítání pořadí řešitelů 
		posledni_body = 100000
		posledni_poradi = 0
		for i in range(len(setrizeni_resitele)):
			rd = setrizeni_resitele[i].export_row()

			if posledni_body > body[i]:
				posledni_body = body[i]
				posledni_poradi = i + 1
			rd['rank'] = posledni_poradi
			rd['points'] = body[i]

			of.rows.append(rd)
	
		return of.to_HttpResponse()