from django.contrib import messages
from django.contrib.auth import login, logout
from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import AuthenticationForm
from django.http import Http404
from django.shortcuts import get_object_or_404, redirect, render

from .models import Encounter

def patient_login(request):
    if request.user.is_authenticated:
        return redirect("website:emr:patient_dashboard")
    form = AuthenticationForm(request, data=request.POST or None)
    if request.method == "POST" and form.is_valid():
        login(request, form.get_user())
        return redirect("website:emr:patient_dashboard")
    return render(request, "emr/patient/login.html", {"form": form})

@login_required
def patient_logout(request):
    logout(request)
    return redirect("website:emr:patient_login")

@login_required
def patient_dashboard(request):
    if not hasattr(request.user, "patient_profile") or not request.user.patient_profile:
        messages.error(request, "No patient profile is linked to this account.")
        return redirect("website:home")
    patient = request.user.patient_profile
    return render(request, "emr/patient/dashboard.html", {
        "patient": patient,
        "encounters": patient.encounters.order_by("-visit_datetime"),
    })

@login_required
def patient_encounter_detail(request, encounter_id):
    if not hasattr(request.user, "patient_profile") or not request.user.patient_profile:
        raise Http404
    patient = request.user.patient_profile
    enc = get_object_or_404(Encounter, pk=encounter_id, patient=patient)
    return render(request, "emr/patient/encounter_detail.html", {
        "patient": patient,
        "encounter": enc,
        "vitals": enc.vitals.order_by("-recorded_at"),
        "diagnoses": enc.diagnoses.order_by("-created_at"),
        "prescriptions": enc.prescriptions.order_by("-created_at"),
        "lab_results": enc.lab_results.order_by("-created_at"),
    })
