from django.contrib import messages
from django.db import IntegrityError, transaction
from django.shortcuts import redirect, render
from django.urls import reverse

from .forms import ConsultationRequestForm
from .models import ConsultationSlot


def home(request):
    if request.method == "POST":
        form = ConsultationRequestForm(request.POST)
        if form.is_valid():
            try:
                with transaction.atomic():
                    form.save()
            except IntegrityError:
                form.add_error("slot", "Это время только что занял другой ученик. Выберите другой слот.")
            else:
                messages.success(
                    request,
                    "Заявка принята. Игорь Олегович свяжется с вами для подтверждения консультации.",
                )
                return redirect(f"{reverse('consultations:home')}#booking")
    else:
        form = ConsultationRequestForm()

    return render(
        request,
        "consultations/home.html",
        {
            "form": form,
            "available_slot_count": ConsultationSlot.objects.available().count(),
        },
    )


def privacy_policy(request):
    return render(request, "consultations/privacy.html")
