# -*- coding: utf-8 -*-

import datetime
import random
import django.contrib.auth
from unittest import TestCase
from django.test import Client
from django.core.urlresolvers import reverse, resolve
from django.core.management import call_command

from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Soustredeni, Nastaveni
from seminar.testutils import create_test_data
from seminar import ovvpfile
from seminar import utils

class SeminarBasicTests(TestCase):
    def setUp(self):
        create_test_data(size=2)
        self.client = Client()

    def tearDown(self):
        call_command('flush', noinput=True, verbosity=0, interactive=False)
        self.cleint = None

    def test_rocniky(self):
        r19 = Rocnik.objects.get(rocnik=21)
        self.assertEqual(r19.roman(), 'XXI')

    def test_render_cislo_e2e(self):
        cs = Cislo.objects.all()
        for c in cs[:4]:
            url = c.verejne_url()
            r = self.client.get(url)
            assert r.status_code == 200
            assert len(r.content) >= 100
            # TODO: Validate cntent as HTML

    def test_render_problem_e2e(self):
        ps = Problem.objects.all()
        for p in ps[:4]:
            url = p.verejne_url()
            r = self.client.get(url)
            assert r.status_code == 200
            assert len(r.content) >= 100
            # TODO: Validate cntent as HTML

    def test_export_e2e(self):
        i_url = '/aesop-export/index.csv'
        i_r = self.client.get(i_url)
        assert i_r.status_code == 200
        ls = i_r.content.strip().split('\n')

        for u in [ls[0], ls[-1]]:
            ex_r = self.client.get('/aesop-export/' + u)
            assert ex_r.status_code == 200
            assert len(ex_r.content) >= 100
            o = ovvpfile.parse(ex_r.content)
            assert o.headers['version'] == '1'

    def test_admin_url(self):
        for m in [Skola, Resitel, Rocnik, Cislo, Problem, Reseni, Nastaveni]:
            o = m.objects.first()
            url = o.admin_url()
            assert url
            view = resolve(url)
            assert view

    def test_verejne_url(self):
        for m in [Rocnik, Cislo, Problem]:
            p = Problem.objects.first()
            url = p.verejne_url()
            assert url
            view = resolve(url)
            assert view

    def test_ovvpfile(self):
        filetext = "H1\ta\nH2\tb\tc\n\nx\ty\tz\n0\t1\t2\n3\t4\t5\n"
        o = ovvpfile.parse(filetext)
        assert len(o.headers) == 2
        assert o.headers['H2'] == 'b\tc'

        assert o.columns == ['x','y','z']
        assert len(o.rows) == 2
        assert o.rows[0]['z'] == '2'

        t = o.to_string()
        assert t == filetext

    def test_roman(self):
        for i in [0, 1, 23, 2015, 1999, 42, 4, 400, 78, 4321, 8765, 999]:
            r = utils.roman(i)
            fr = utils.from_roman(r)
            assert fr == i