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

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


def generate_hana_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_CALIBRI = os.path.join(FONT_DIR, "calibri-regular.ttf")
    
    pdfmetrics.registerFont(TTFont("Calibri", FONT_CALIBRI))
    
    # --- Data ---
    nama = data["nama"]
    alamat1 = data["alamat1"]
    alamat2 = data["alamat2"]
    alamat3 = data["alamat3"]
    

    # Tanggal random dari 3 bulan ke belakang
    now = datetime.now()
    # List 3 bulan ke belakang (misal: Juli 2025 -> [4, 5, 6] = April, Mei, Juni)
    bulan_list = [(now.month - i - 1) % 12 + 1 for i in range(3)]
    tahun_list = [now.year if now.month - i - 1 >= 0 else now.year - 1 for i in range(3)]

    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)]
    print("Bulan List:", bulan_list)

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

    # PERIODE RANDOM 3 BULAN KE BELAKANG DARI BULAN SAAT INI, TANGGAL ANTARA 25-30/31 (TANGGAL AKHIR BULAN TSB)
    # contoh 28 May 2025, tidak ada awal dan akhir, hanya satu tanggal
    max_hari = calendar.monthrange(tahun_target, bulan_target)[1]
    awal = datetime(tahun_target, bulan_target, random.randint(25, max_hari))
    # Cari akhir bulan target
    periode = awal.strftime("%d %B %Y")
    
    norek =  ''.join(random.choices('0123456789', k=8))

    # --- Draw ke PDF ---
    # Tanggal (atas, font bold, putih, size 10)
    c.setFont("Calibri", 11)
    c.setFillColor(HexColor("#000000"))
    c.drawString(448, 733, norek)
    c.drawString(440, 680, periode)
    # c.drawString(482, 726, periode_akhir_str)

    # Nama nasabah (font light, size 7, hitam, rata kanan)
    c.setFont("Calibri", 11)
    c.setFillColor(HexColor("#000000"))

    batas_kiri = 53
    batas_adr = 760
    c.drawString(batas_kiri, 760, nama)      
    
    c.drawString(batas_kiri, batas_adr - 15 * 1, alamat1)   
    c.drawString(batas_kiri, batas_adr - 15 * 2, alamat2)   
    c.drawString(batas_kiri, batas_adr - 15 * 3, alamat3)
    
    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)
