from django.shortcuts import render, redirect
from django.contrib import messages

from app_verbrauch.models import VISysVerbrauchRahmen
from app_verbrauch.service import process_reuid_nutzer_id, get_all_chart_data, get_all_chart_data_spez, get_all_dash_cards_data

from django.http import JsonResponse
from django.contrib.auth.decorators import login_required

from app_real_estate.models import RealEstateUnit, RealEstate
from app_nutzer.models import User
from app_admin.mixins import reu_person_access_required
# Neue Views


@reu_person_access_required
def view_verbrauch_uebersicht(request, reuid: int, nutzer_id: int):
    reu    = RealEstateUnit.objects.filter(REUID=reuid).first()
    nutzer = User.objects.filter(PersonenID=nutzer_id).first()

    if reu is None or nutzer is None:
        messages.error(request, f'Die Kombination Einheit {reuid} / Nutzer {nutzer_id} wurde nicht gefunden.')
        return redirect('/')

    usage_dash_cards = get_all_dash_cards_data(reuid, nutzer_id)

    return render(request, 'verbrauch_ubersicht.html', {
        'reu':    reu,
        'nutzer': nutzer,
        'reuid':    reuid,
        'nutzer_id': nutzer_id,
        'UserAnredeAlsBriefkopf': nutzer.get_name_for_briefkopf(),
        'UsageDashCardsData': usage_dash_cards,
    })


@reu_person_access_required
def view_verbrauch(request, reuid: int, nutzer_id: int):
    reu    = RealEstateUnit.objects.filter(REUID=reuid).first()
    nutzer = User.objects.filter(PersonenID=nutzer_id).first()

    if reu is None or nutzer is None:
        messages.error(request, f'Die Kombination Einheit {reuid} / Nutzer {nutzer_id} wurde nicht gefunden.')
        return redirect('/')

    return render(request, 'verbrauch_neu.html', {
        'reu':    reu,
        'nutzer': nutzer,
        'reuid':    reuid,
        'nutzer_id': nutzer_id,
    })


@reu_person_access_required
def view_verbrauch_spez(request, reuid: int, nutzer_id: int):
    reu    = RealEstateUnit.objects.filter(REUID=reuid).first()
    nutzer = User.objects.filter(PersonenID=nutzer_id).first()

    if reu is None or nutzer is None:
        messages.error(request, f'Die Kombination Einheit {reuid} / Nutzer {nutzer_id} wurde nicht gefunden.')
        return redirect('/')

    return render(request, 'verbrauch_spez.html', {
        'reu':    reu,
        'nutzer': nutzer,
        'reuid':    reuid,
        'nutzer_id': nutzer_id,
    })



# Neue APIs
@reu_person_access_required
def verbrauch_chart_api(request, reuid, nutzer_id):
    charts = get_all_chart_data(reuid, nutzer_id)
    
    return JsonResponse({
        "meta": {
            "reuid": reuid,
            # "address": {
            #     "city":         mietv.get('City'),
            #     "street":       mietv.get('Street'),
            #     "house_number": mietv.get('HouseNumber'),
            #     "unit":         mietv.get('REUDesc'),
            # },
            # "heading": f"{mietv.get('City')}, {mietv.get('Street')} {mietv.get('HouseNumber')}, {mietv.get('REUDesc')}",
        },
        "charts": charts
    })


@reu_person_access_required
def verbrauch_chart_spez_api(request, reuid : int, nutzer_id : int):
    
    charts = get_all_chart_data_spez(reuid, nutzer_id)
    
    return JsonResponse({
        "meta": {
            "reuid": reuid,
            # "address": {
            #     "city":         mietv.get('City'),
            #     "street":       mietv.get('Street'),
            #     "house_number": mietv.get('HouseNumber'),
            #     "unit":         mietv.get('REUDesc'),
            # },
            # "heading": f"{mietv.get('City')}, {mietv.get('Street')} {mietv.get('HouseNumber')}, {mietv.get('REUDesc')}",
        },
        "charts": charts
    })