# -*- coding: utf-8 -*-
from django.shortcuts import render, HttpResponseRedirect
from django.template.loader import render_to_string
from django.http import HttpRequest, HttpResponse
from django.contrib.auth import authenticate, login, logout
from django.template.exceptions import TemplateDoesNotExist, TemplateSyntaxError
from rosmorport_tsts.models import TbPetsClones
from time import process_time



def index(request: HttpRequest) -> HttpResponse:
    """ тест индексной страницы

    :param
    :return response: исходящий http-ответ
    """
    # try:
    #     return render(request, "index.jinja", {})
    # except (TemplateDoesNotExist, TemplateSyntaxError) as e:
    #     # Обработка ошибки отсутствия шаблона
    #     return HttpResponse(f"Не нашли шаблон или в нем ошибка \"{e}\".", status=424)
    return render(request, template_name="page/index.jinja", context={})


def my_logout(request: HttpRequest) -> HttpResponseRedirect:
    """ Разлогируем пользователя

    :param
    :return response: исходящий http-ответ
    """
    logout(request)
    return HttpResponseRedirect(redirect_to='/')


def my_login(request: HttpRequest) -> HttpResponseRedirect:
    """ Логиним пользователя

    :param
    :return response: исходящий http-ответ
    """
    try:
        if request.method == 'POST':
            user = authenticate(request,
                                username=request.POST['username'],
                                password=request.POST['password'])
            if user is None:
                return HttpResponseRedirect(redirect_to='/not-auth')
            else:
                login(request, user)
        return HttpResponseRedirect('/')
    except KeyError:
        return HttpResponseRedirect('/')


def not_auth(request: HttpRequest) -> HttpResponse:
    """ Страница для неавторизованных пользователей

    :param
    :return response: исходящий http-ответ
    """
    to_template = {"META_REFRESH": "15; url=/"}
    return render(request, template_name="popup/not_auth.jinja", context=to_template, status=401)


def add_clone(request: HttpRequest) -> HttpResponse:
    """ Добавление клонированного питомца

    :param
    :return response: исходящий http-ответ
    """
    to_template = {
        "META_REFRESH": "600; url=/logout",    # автоматический logout через 10 минут бездействия
        "PET_TYPES": TbPetsClones.PetType.choices,
        "PET_SEXES": TbPetsClones.PetSex.choices
    }
    return render(request, template_name="page/input_data.jinja", context=to_template)


def save_clone(request: HttpRequest) -> HttpResponse:
    """ Сохранение записи о клонированном питомце

    :param
    :return response: исходящий http-ответ
    """
    to_template = {
        "META_REFRESH": "2; url=/add-clone",  # автоматическое перенаправление на новую регистрацию через 2 секунды
    }
    if request.method == 'POST':
        try:
            pet = TbPetsClones(
                iPetType=int(request.POST.get('type')),
                szPetName=request.POST.get('name'),
                iPetSex=int(request.POST.get('sex')),
                bPetIsAlive=True if 'is-alive' in request.POST else False,
                szPetOwner=None if request.POST.get('owner') == "" else request.POST.get('owner'),
                szPetPrice=int(request.POST.get('pay')),
                szPetComment= request.POST.get('note'),
                bPetIsReg=False if 'noreg' in request.POST else True
            )
            pet.save()

        except (KeyError, ValueError, TypeError):
            return HttpResponseRedirect('/add-clone')
    return render(request, template_name="page/save_data.jinja", context=to_template)


def report1(request: HttpRequest) -> HttpResponse:
    """ Отчет по клонированным питомцам

    :param
    :return response: исходящий http-ответ
    """
    # проверка логина
    if not request.user.is_authenticated:
        return HttpResponseRedirect(redirect_to='/')
    cpu_start = process_time()
    to_template = {"PETS": TbPetsClones.objects.all()}
    to_template.update({"Q_CPU": process_time() - cpu_start})
    return render(request, template_name="page/report1.jinja", context=to_template)


def report2(request: HttpRequest) -> HttpResponse:
    """ Отчет по клонированным питомцам

    :param
    :return response: исходящий http-ответ
    """
    if not request.user.is_authenticated:
        return HttpResponseRedirect(redirect_to='/')
    cpu_start = process_time()
    to_template = {
        "PETS": TbPetsClones.objects.all(),
        "PET_TYPES": TbPetsClones.PetType.choices,
        "PET_SEXES": TbPetsClones.PetSex.choices
    }
    to_template.update({"Q_CPU": process_time() - cpu_start})
    return render(request, template_name="page/report2.jinja", context=to_template)