"""Spreadsheet export endpoint."""

from django.http import HttpResponse, JsonResponse
from django.utils import timezone
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_GET

from api.views import _get_family_user_ids, _get_user_order_ids, require_auth
from notas.planilha import generate_planilha


@csrf_exempt
@require_GET
@require_auth
def planilha_export(request):
    """
    GET /api/planilha/?year=YYYY — Excel budget spreadsheet for the user/family.
    """
    user = request.api_user
    year_param = (request.GET.get('year') or '').strip()
    now = timezone.now()
    if year_param:
        try:
            year = int(year_param)
        except (TypeError, ValueError):
            return JsonResponse({'error': 'Parâmetro year inválido. Use YYYY.'}, status=400)
        if year < 2000 or year > 2100:
            return JsonResponse({'error': 'Parâmetro year inválido. Use YYYY.'}, status=400)
    else:
        year = now.year

    family_ids = _get_family_user_ids(user)
    order_ids = _get_user_order_ids(user)
    content, filename = generate_planilha(user, year, order_ids, family_ids)

    response = HttpResponse(
        content,
        content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
    )
    response['Content-Disposition'] = f'attachment; filename="{filename}"'
    return response
