from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from PyPDF2 import PdfReader, PdfWriter
from datetime import datetime, timedelta
import random
import os
import uuid
from reportlab.lib.pagesizes import A4

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
FONT_DIR = os.path.join(BASE_DIR, "../assets/fonts")

def get_template_size(template_path):
    try:
        template_reader = PdfReader(template_path)
        template_page = template_reader.pages[0]
        template_width = float(template_page.mediabox.width)
        template_height = float(template_page.mediabox.height)
        print(f"Template size: {template_width} x {template_height}")
        return (template_width, template_height)
    except Exception as e:
        print(f"Error reading template size: {e}")
        return A4  # fallback ke A4 default

def generate_krom_pdf(data, template_path, output_path):
    from reportlab.lib.colors import HexColor
    TEMP_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../static/tmp")
    os.makedirs(TEMP_DIR, exist_ok=True)

    packet_path = os.path.join(TEMP_DIR, f"temp_overlay_{uuid.uuid4().hex}.pdf")

    page_size = get_template_size(template_path)

    # Buat canvas dengan ukuran yang sama
    c = canvas.Canvas(packet_path, pagesize=page_size)

    # Poppins-SemiBold.ttf
    FONT_POPPINS_SEMIBOLD = os.path.join(FONT_DIR, "Poppins-SemiBold.ttf")
    # Poppins-Regular.ttf
    FONT_POPPINS_REG = os.path.join(FONT_DIR, "Poppins-Regular.ttf")
    
    pdfmetrics.registerFont(TTFont("Poppins-SemiBold", FONT_POPPINS_SEMIBOLD))
    pdfmetrics.registerFont(TTFont("Poppins", FONT_POPPINS_REG))

    # --- Data ---
    nama = data["nama"]
    
    # norek random 12 digit, diawali selain 0, 5 digit akhir 0 semua
    norek = str(random.randint(1, 9)) + ''.join(random.choices('0123456789', k=6)) + "00000"   

    saldo_sebelum = "Rp0,00"
    saldo_akhir = "Rp0,00"
    total_pemasukan = "+Rp0,00"
    total_pengeluaran = "-Rp0,00"

    # --- Draw ke PDF ---
    c.setFont("Poppins-SemiBold", 8.5)
    c.setFillColor(HexColor("#000000"))
    c.drawString(17.5, 1088, nama)
    c.drawString(295, 1088, saldo_sebelum)
    c.setFillColor(HexColor("#54b84d"))
    c.drawString(571, 1088, total_pemasukan)

    c.setFillColor(HexColor("#000000"))
    c.drawString(17.5, 1058, norek)
    c.drawString(295, 1058, saldo_akhir)
    c.drawString(571, 1058, total_pengeluaran)

    c.save()

    background = PdfReader(template_path)
    overlay = PdfReader(packet_path)
    writer = PdfWriter()

    page = background.pages[0]
    page.merge_page(overlay.pages[0])
    writer.add_page(page)

    with open(output_path, "wb") as f:
        writer.write(f)

    # Bersihkan file sementara
    if os.path.exists(packet_path):
        os.remove(packet_path)
