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

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


def generate_bbni_new_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")

    c = canvas.Canvas(packet_path)

    # --- Register Figtree fonts (pastikan file font tersedia di FONT_DIR) ---
    FONT_MONO_BOLD = os.path.join(FONT_DIR, "MonospaceBold.ttf")
    FONT_DEJAVU_SANS_BOLD = os.path.join(FONT_DIR, "DejaVuSans-Bold.ttf")
    FONT_DEJAVU_SANS = os.path.join(FONT_DIR, "DejaVuSans.ttf")

    pdfmetrics.registerFont(TTFont("Mono-Bold", FONT_MONO_BOLD))
    pdfmetrics.registerFont(TTFont("DejaVuSans-Bold", FONT_DEJAVU_SANS_BOLD))
    pdfmetrics.registerFont(TTFont("DejaVuSans", FONT_DEJAVU_SANS))

    # --- Data ---
    nama = data["nama"]
    alamat1 = data["alamat1"]
    alamat2 = data["alamat2"]
    provinsi = data["provinsi"]

    # --- Draw ke PDF ---

    # Nama nasabah (font light, size 7, hitam, rata kanan)
    c.setFont("DejaVuSans-Bold", 10)
    c.setFillColor(HexColor("#000000"))
    # c.drawString(95, 726, cabang)      
    c.drawString(24, 725, nama)
    c.setFont("DejaVuSans", 8)
    c.drawString(24, 722 - 11, alamat1)
    c.drawString(24, 722 - 22, alamat2)
    c.drawString(24, 722 - 33, provinsi)

    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)
