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
import calendar
from reportlab.lib.utils import simpleSplit


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

def generate_allo_pdf(data, template_path, output_path):
    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")

    FONT_OPEN_BOLD = os.path.join(FONT_DIR, "Poppins-Bold.ttf")
    FONT_OPEN_REG = os.path.join(FONT_DIR, "Poppins-Regular.ttf")
    FONT_TIMES_BOLD = os.path.join(FONT_DIR, "times_bold.ttf")

    pdfmetrics.registerFont(TTFont("Poppins-Bold", FONT_OPEN_BOLD))
    pdfmetrics.registerFont(TTFont("Poppins-Regular", FONT_OPEN_REG))
    pdfmetrics.registerFont(TTFont("Times-Roman", FONT_TIMES_BOLD))

    c = canvas.Canvas(packet_path)

    # Data untuk ALLO
    nama = data["nama"]

    now = datetime.now()
    awal = (now - timedelta(days=now.day)).replace(day=1)
    akhir = now.replace(day=1) - timedelta(days=1)
    
    # bulan indo dengan format 3 huruf
    bulan_indo = [
        "", "Jan", "Feb", "Mar", "Apr", "Mei", "Jun",
        "Jul", "Agu", "Sep", "Okt", "Nov", "Des"
    ]

    bulan_list = [(now.month - i - 1) % 12 + 1 for i in range(1, 4)]
    tahun_list = [now.year if now.month - i - 1 >= 0 else now.year - 1 for i in range(1, 4)]

    # Pilih salah satu bulan dan tahun secara acak
    idx = random.randint(0, 2)
    bulan_target = bulan_list[idx]
    tahun_target = tahun_list[idx]

    # Ambil tanggal awal dan akhir bulan target
    awal = datetime(tahun_target, bulan_target, 1)
    akhir_hari = calendar.monthrange(tahun_target, bulan_target)[1]
    akhir = datetime(tahun_target, bulan_target, akhir_hari)

    periode_str = f"{awal.day:02d} - {akhir.day:02d} {bulan_indo[awal.month]} {awal.year}"

    c.setFont("Times-Roman", 10)
    c.drawString(72, 588, nama)

    c.drawString(74, 519, periode_str)

    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)