from childmonitoring.forms import (
    SchoolForm, RegionForm, LeisureForm, CaseForm, DayHospitalForm, SurgicalMedicalHistoryForm,
    FamilyMedicalHistoryForm, IdentifiedAllergyForm, IdentifiedPathologyForm, BaseMedicalHistoryForm, OutpatientForm,
    SpecialityForm, SpecialistReportForm
)
from django.shortcuts import render, get_object_or_404
from childmonitoring.models import (
    School, Region, Leisure, DayHospital, Case, SurgicalMedicalHistory, FamilyMedicalHistory,
    IdentifiedAllergy, IdentifiedPathology,BaseMedicalHistory, Outpatient, SpecialistReport, Speciality
)


# Update for School
def update_school(request, pk):
    school = get_object_or_404(School, pk=pk)
    if request.method == "POST":
        form = SchoolForm(request.POST, instance=school)
        if form.is_valid():
            try:
                school = form.save(commit=False)
                school.update_by = request.user.username
                school.save()
                request.session['status'] = 'success'
            except Exception as e:
                request.session['status'] = f'error: {str(e)}'
        else:
            request.session['status'] = 'error'
    else:
        form = SchoolForm(instance=school)
    return form


# Update for Region
def update_region(request, pk):
    region = get_object_or_404(Region, pk=pk)
    if request.method == "POST":
        form = RegionForm(request.POST, instance=region)
        if form.is_valid():
            try:
                region = form.save(commit=False)
                region.update_by = request.user.username
                region.save()
                request.session['status'] = 'success'
            except Exception as e:
                request.session['status'] = f'error: {str(e)}'
        else:
            request.session['status'] = 'error'
    else:
        form = RegionForm(instance=region)
    return form


# Update for Leisure
def update_leisure(request, pk):
    leisure = get_object_or_404(Leisure, pk=pk)
    if request.method == "POST":
        form = LeisureForm(request.POST, instance=leisure)
        if form.is_valid():
            try:
                leisure = form.save(commit=False)
                leisure.update_by = request.user.username
                leisure.save()
                request.session['status'] = 'success'
            except Exception as e:
                request.session['status'] = f'error: {str(e)}'
        else:
            request.session['status'] = 'error'
    else:
        form = LeisureForm(instance=leisure)
    return form


# Update for DayHospital
def update_day_hospital(request, pk):
    day_hospital = get_object_or_404(DayHospital, pk=pk)
    if request.method == "POST":
        form = DayHospitalForm(request.POST, instance=day_hospital)
        if form.is_valid():
            try:
                day_hospital = form.save(commit=False)
                day_hospital.update_by = request.user.username
                day_hospital.save()
                request.session['status'] = 'success'
            except Exception as e:
                request.session['status'] = f'error: {str(e)}'
        else:
            request.session['status'] = 'error'
    else:
        form = DayHospitalForm(instance=day_hospital)
    return form


# Update for Case
def update_case(request, pk):
    case = get_object_or_404(Case, pk=pk)
    if request.method == "POST":
        form = CaseForm(request.POST, instance=case)
        if form.is_valid():
            try:
                case = form.save(commit=False)
                case.update_by = request.user.username
                case.save()
                request.session['status'] = 'success'
            except Exception as e:
                request.session['status'] = f'error: {str(e)}'
        else:
            request.session['status'] = 'error'
    else:
        form = CaseForm(instance=case)
    return form


# Update for FamilyMedicalHistory
def update_family_medical_history(request, pk):
    family_medical_history = get_object_or_404(FamilyMedicalHistory, pk=pk)
    if request.method == "POST":
        form = FamilyMedicalHistoryForm(request.POST, instance=family_medical_history)
        if form.is_valid():
            try:
                family_medical_history = form.save(commit=False)
                family_medical_history.update_by = request.user.username
                family_medical_history.save()
                request.session['status'] = 'success'
            except Exception as e:
                request.session['status'] = f'error: {str(e)}'
        else:
            request.session['status'] = 'error'
    else:
        form = FamilyMedicalHistoryForm(instance=family_medical_history)
    return form


# Update for SurgicalMedicalHistory
def update_surgical_medical_history(request, pk):
    surgical_medical_history = get_object_or_404(SurgicalMedicalHistory, pk=pk)
    if request.method == "POST":
        form = SurgicalMedicalHistoryForm(request.POST, instance=surgical_medical_history)
        if form.is_valid():
            try:
                surgical_medical_history = form.save(commit=False)
                surgical_medical_history.update_by = request.user.username
                surgical_medical_history.save()
                request.session['status'] = 'success'
            except Exception as e:
                request.session['status'] = f'error: {str(e)}'
        else:
            request.session['status'] = 'error'
    else:
        form = SurgicalMedicalHistoryForm(instance=surgical_medical_history)
    return form


def update_identified_allergy(request, pk):
    identified_allergy = get_object_or_404(IdentifiedAllergy, pk=pk)
    if request.method == "POST":
        form = IdentifiedAllergyForm(request.POST, instance=identified_allergy)
        if form.is_valid():
            try:
                identified_allergy = form.save(commit=False)
                identified_allergy.updated_by = request.user.username
                identified_allergy.save()
                request.session['status'] = 'success'
            except Exception as e:
                request.session['status'] = f'error: {str(e)}'
        else:
            request.session['status'] = 'error'
    else:
        form = IdentifiedAllergyForm(instance=identified_allergy)
    return form


def update_identified_pathology(request, pk):
    identified_pathology = get_object_or_404(IdentifiedPathology, pk=pk)
    if request.method == "POST":
        form = IdentifiedPathologyForm(request.POST, instance=identified_pathology)
        if form.is_valid():
            try:
                identified_pathology = form.save(commit=False)
                identified_pathology.updated_by = request.user.username
                identified_pathology.save()
                request.session['status'] = 'success'
            except Exception as e:
                request.session['status'] = f'error: {str(e)}'
        else:
            request.session['status'] = 'error'
    else:
        form = IdentifiedPathologyForm(instance=identified_pathology)
    return form


def update_base_medical_history(request, pk):
    base_medical_history = get_object_or_404(BaseMedicalHistory, pk=pk)
    if request.method == "POST":
        form = BaseMedicalHistoryForm(request.POST, instance=base_medical_history)
        if form.is_valid():
            try:
                base_medical_history = form.save(commit=False)
                base_medical_history.updated_by = request.user.username
                base_medical_history.save()
                request.session['status'] = 'success'
            except Exception as e:
                request.session['status'] = f'error: {str(e)}'
        else:
            request.session['status'] = 'error'
    else:
        form = BaseMedicalHistoryForm(instance=base_medical_history)
    return form


def update_outpatient(request, pk):
    outpatient = get_object_or_404(Outpatient, pk=pk)
    if request.method == "POST":
        form = OutpatientForm(request.POST, instance=outpatient)
        if form.is_valid():
            try:
                outpatient = form.save(commit=False)
                outpatient.updated_by = request.user.username
                outpatient.save()
                request.session['status'] = 'success'
            except Exception as e:
                request.session['status'] = f'error: {str(e)}'
        else:
            request.session['status'] = 'error'
    else:
        form = OutpatientForm(instance=outpatient)
    return form


def update_speciality(request, pk):
    speciality = get_object_or_404(Speciality, pk=pk)
    if request.method == "POST":
        form = SpecialityForm(request.POST, instance=speciality)
        if form.is_valid():
            try:
                speciality = form.save(commit=False)
                speciality.updated_by = request.user.username
                speciality.save()
                request.session['status'] = 'success'
            except Exception as e:
                request.session['status'] = f'error: {str(e)}'
        else:
            request.session['status'] = 'error'
    else:
        form = SpecialityForm(instance=speciality)
    return form


def update_specialist_report(request, pk):
    specialist_report = get_object_or_404(SpecialistReport, pk=pk)
    if request.method == "POST":
        form = SpecialistReportForm(request.POST, instance=specialist_report)
        if form.is_valid():
            try:
                specialist_report = form.save(commit=False)
                specialist_report.updated_by = request.user.username
                specialist_report.save()
                request.session['status'] = 'success'
            except Exception as e:
                request.session['status'] = f'error: {str(e)}'
        else:
            request.session['status'] = 'error'
    else:
        form = SpecialistReportForm(instance=specialist_report)
    return form

