from django.shortcuts import render
from django.http import HttpResponse
from io import BytesIO


def calculate_checksum(number):
    """Calculate the 7th digit checksum for a 6-digit number."""
    buf = f"{number:06d}"
    v = 0
    for j in range(6):
        v += ((ord(buf[j]) - ord('0')) * (7 - j))
    v = 11 - (v % 11)
    if v >= 10:
        v -= 10
    return v


def generate_form(request):
    """Render the form for user input."""
    if request.method == "POST":
        start = request.POST.get("start")
        end = request.POST.get("end")

        try:
            start = int(start)
            end = int(end)

            if len(str(start)) != 6 or len(str(end)) != 6:
                return render(request, "form.html", {"error": "Start and end numbers must be 6 digits."})

            if start > end:
                return render(request, "form.html", {"error": "Start number must be less than or equal to the end number."})

        except ValueError:
            return render(request, "form.html", {"error": "Start and end must be valid integers."})

        # Generate filename
        prefix = f"Series_{str(start)[:2]}_{str(start)[2:]}_To_{str(end)[2:]}"
        filename = f"{prefix}.txt"

        # Generate the series
        buffer = BytesIO()
        for i in range(start, end + 1):
            checksum = calculate_checksum(i)
            full_number = (i * 10) + checksum
            buffer.write(f"{full_number:07d}\n".encode())

        # Prepare response
        buffer.seek(0)
        response = HttpResponse(buffer, content_type="text/plain")
        response['Content-Disposition'] = f'attachment; filename="{filename}"'
        return response

    # GET request: Display the form
    return render(request, "form.html")
