#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Generate StudioSoft invoices — format persis template Numbers Arek Lancor"""
from fpdf import FPDF
import os

OUTDIR = os.path.dirname(os.path.abspath(__file__))

# ============ HEADER DATA STUDIOSOFT (persis template) ============
COMPANY = "CV. KREASI STUDIOSOFT"
COMP_ALAMAT = "Jl. Mangga 3 E-346 B. Pondok Tjandra. Sidoarjo"
COMP_TELP = "Phone : 031-71847536 / 081935000624"

# Bank (dari template)
BANKS = [
    ("BCA cab. Rungkut Mapan, Surabaya", "6750379638", "Uky Yanuhandoko S. Kom"),
    ("Mandiri Bank cab. Bratang Binangun, Surabaya", "142-00-1068384-4", "Uky Yanuhandoko S. Kom"),
]

INVOICE_NO = 101
YEAR = "2026"
MONTH_ROMAN = "VIII"
TGL_INVOICE = "Agustus 2026"
TGL_KOTA = "Surabaya, 1 Agustus 2026"
PERIODE = "Agustus 2026"
TERMIN = "100 % Maintenance Fee / Monthly"

# ============ DATA CLIENAT + Breakdown ============
# tiap client: (nama, kota, total, [(item, [sub-bullets]), ...])
clients = [
    (
        "DAS Bengkel Indonesia", "Indonesia", 3000000,
        [
            ("Website Maintenance", [
                "Pembuatan Website",
                "Pembuatan dan optimasi akun Social Media",
                "Website Update Slide / Content - Backup Website Regular",
                "Website Restore",
                "Analytic Data Report Update",
            ]),
            ("Input Konten", [
                "Informasi Engine Overhaul & Repair",
                "Jasa Perbaikan Kendaraan",
                "Promo Bengkel",
                "Edukasi Perawatan Kendaraan",
            ]),
            ("SEO", [
                "Google Analytic",
                "Google Business",
                "Google Map",
                "Keyword : Bengkel Engine Overhaul, Bengkel Spesialis Mesin",
            ]),
            ("Optimasi Campaign Insight", [
                "Threads Campaign",
                "Business Facebook Fan Pages",
                "Konten Informasi Bengkel",
            ]),
        ],
    ),
    (
        "RSIA Kendangsari", "Surabaya", 2000000,
        [
            ("Website Maintenance", [
                "Pembuatan Website",
                "Pembuatan dan optimasi akun Social Media",
                "Website Update Slide / Content - Backup Website Regular",
                "Analytic Data Report Update",
            ]),
            ("Input Konten", [
                "Layanan Rumah Sakit",
                "Informasi Dokter & Jadwal",
                "Edukasi Kesehatan Ibu & Anak",
                "Promo Program Kesehatan",
            ]),
            ("SEO", [
                "Google Analytic",
                "Google Business",
                "Google Map",
                "Keyword : RSIA Surabaya, Rumah Sakit Ibu dan Anak",
            ]),
            ("Optimasi Campaign Insight", [
                "Instagram Campaign",
                "Business Facebook Fan Pages",
                "Konten Edukasi Kesehatan",
            ]),
        ],
    ),
    (
        "TSC (The Skin Code Clinic)", "Krian", 3000000,
        [
            ("Website Maintenance", [
                "Pembuatan Website",
                "Pembuatan dan optimasi akun Social Media",
                "Website Update Slide / Content - Backup Website Regular",
                "Analytic Data Report Update",
            ]),
            ("Input Konten", [
                "Layanan Klinik Kecantikan",
                "Informasi Perawatan Kulit",
                "Promo Perawatan",
                "Edukasi Skincare",
            ]),
            ("SEO", [
                "Google Analytic",
                "Google Business",
                "Google Map",
                "Keyword : Klinik Kecantikan Krian, Perawatan Kulit",
            ]),
            ("Optimasi Campaign Insight", [
                "Threads Campaign",
                "Business Instagram Feed & Stories",
                "Konten Edukasi Kulit",
            ]),
        ],
    ),
    (
        "TS Law (Tito Suprianto Law Firm)", "Surabaya", 3000000,
        [
            ("Website Maintenance", [
                "Pembuatan Website",
                "Pembuatan dan optimasi akun Social Media",
                "Website Update Slide / Content - Backup Website Regular",
                "Analytic Data Report Update",
            ]),
            ("Input Konten", [
                "Jasa Hukum Perusahaan",
                "Layanan Legal UMKM & Startup",
                "Edukasi Hukum",
                "Konsultasi Hukum",
            ]),
            ("SEO", [
                "Google Analytic",
                "Google Business",
                "Google Map",
                "Keyword : Konsultan Hukum Surabaya, Law Firm",
            ]),
            ("Optimasi Campaign Insight", [
                "LinkedIn Campaign",
                "Threads Campaign",
                "Business Facebook Fan Pages",
            ]),
        ],
    ),
    (
        "EveryBe", "Indonesia", 2500000,
        [
            ("Website Maintenance", [
                "Pembuatan Website",
                "Pembuatan dan optimasi akun Social Media",
                "Website Update Slide / Content - Backup Website Regular",
                "Analytic Data Report Update",
            ]),
            ("Input Konten", [
                "Produk Personal Care",
                "Layanan Perawatan Diri",
                "Promo Produk",
                "Edukasi Perawatan Tubuh",
            ]),
            ("SEO", [
                "Google Analytic",
                "Google Business",
                "Google Map",
                "Keyword : Personal Care, Skincare, Body Care",
            ]),
            ("Optimasi Campaign Insight", [
                "Business Facebook Fan Pages",
                "Business Instagram Feed & Stories",
                "Konten Branding",
            ]),
        ],
    ),
    (
        "Surabaya Skin Centre (SSC)", "Surabaya", 2500000,
        [
            ("Website Maintenance", [
                "Pembuatan Website",
                "Pembuatan dan optimasi akun Social Media",
                "Website Update Slide / Content - Backup Website Regular",
                "Analytic Data Report Update",
            ]),
            ("Input Konten", [
                "Layanan Klinik Kulit",
                "Informasi Dokter Spesialis",
                "Promo Perawatan",
                "Edukasi Kesehatan Kulit",
            ]),
            ("SEO", [
                "Google Analytic",
                "Google Business",
                "Google Map",
                "Keyword : Klinik Kulit Surabaya, Dermatologi",
            ]),
            ("Optimasi Campaign Insight", [
                "Business Facebook Fan Pages",
                "Business Instagram Feed & Stories",
                "Konten Edukasi Kulit",
            ]),
        ],
    ),
    (
        "LEIT (Leadership-English Institute)", "Surabaya", 3000000,
        [
            ("Website Maintenance", [
                "Pembuatan Website",
                "Pembuatan dan optimasi akun Social Media",
                "Website Update Slide / Content - Backup Website Regular",
                "Analytic Data Report Update",
            ]),
            ("Input Konten", [
                "Program Kursus Bahasa Inggris",
                "Layanan Kelas & Kurikulum",
                "Promo Pendaftaran",
                "Edukasi Bahasa Inggris",
            ]),
            ("SEO", [
                "Google Analytic",
                "Google Business",
                "Google Map",
                "Keyword : Kursus Bahasa Inggris Surabaya",
            ]),
            ("Optimasi Campaign Insight", [
                "LinkedIn Campaign",
                "Threads Campaign",
                "Business Facebook Fan Pages",
            ]),
        ],
    ),
]


class Invoice(FPDF):
    def footer(self):
        self.set_y(-22)
        self.set_font("Helvetica", "", 8)
        self.set_text_color(120, 120, 120)
        self.cell(0, 10, str(self.page_no()), 0, 0, "C")


def rupiah(n):
    return "Rp {:,.0f}".format(n).replace(",", ".")


def add_invoice(nama, kota, total, items, no):
    pdf = Invoice()
    pdf.add_page("P", (210, 297))
    pdf.set_auto_page_break(auto=True, margin=24)
    pdf.set_margins(20, 16, 20)
    W = 210 - 40

    # ===== HEADER (logo kiri + teks kanan) =====
    pdf.set_text_color(20, 20, 20)
    logo = os.path.join(OUTDIR, 'assets_studiosoft_logo.png')
    # Letakkan logo di kiri dengan ukuran proporsional (~28mm tinggi)
    pdf.image(logo, x=20, y=16, w=28)
    # Teks perusahaan di kanan (rata tengah terhadap area luasan)
    pdf.set_xy(50, 18)
    pdf.set_font("Helvetica", "B", 13)
    pdf.cell(W - 30, 6, COMPANY, align="L")
    pdf.set_xy(50, 24)
    pdf.set_font("Helvetica", "", 9.5)
    pdf.cell(W - 30, 5, COMP_ALAMAT, align="L")
    pdf.set_xy(50, 29)
    pdf.cell(W - 30, 5, COMP_TELP, align="L")

    pdf.ln(12)
    pdf.set_font("Helvetica", "B", 18)
    pdf.cell(W, 10, "INVOICE", new_x="LMARGIN", new_y="NEXT", align="C")
    pdf.set_font("Helvetica", "", 10)
    pdf.cell(W, 6, "No. %d/INV/%s/%s" % (no, MONTH_ROMAN, YEAR), new_x="LMARGIN", new_y="NEXT", align="C")

    pdf.ln(5)

    # ===== Kepada Yth (kiri) + tanggal (kanan) =====
    pdf.set_font("Helvetica", "B", 10)
    pdf.cell(W * 0.5, 6, "Kepada Yth:", new_x="END")
    pdf.set_font("Helvetica", "", 10)
    pdf.cell(W * 0.5, 6, TGL_KOTA, align="R", new_x="LMARGIN", new_y="NEXT")
    pdf.set_font("Helvetica", "", 10)
    pdf.cell(W * 0.5, 6, "Pimpinan", new_x="LMARGIN", new_y="NEXT")
    pdf.set_font("Helvetica", "B", 10)
    pdf.cell(W, 6, nama.upper(), new_x="LMARGIN", new_y="NEXT")
    pdf.set_font("Helvetica", "", 10)
    pdf.cell(W, 6, kota, new_x="LMARGIN", new_y="NEXT")

    pdf.ln(3)

    # ===== Subject =====
    pdf.set_font("Helvetica", "B", 9.5)
    pdf.cell(W, 5, "Subject : DIGITAL MARKETING FEE MAINTENANCE", new_x="LMARGIN", new_y="NEXT")
    pdf.set_font("Helvetica", "", 9.5)
    pdf.cell(W, 5, "Relating to the above subject, we estimate as follows.", new_x="LMARGIN", new_y="NEXT")
    pdf.ln(2)
    pdf.set_font("Helvetica", "B", 9.5)
    pdf.cell(W * 0.6, 5, "Termin Pembayaran : %s" % TERMIN, new_x="LMARGIN", new_y="NEXT")
    pdf.set_font("Helvetica", "", 9.5)
    pdf.cell(W * 0.5, 5, "Meliputi :", new_x="END")
    pdf.set_font("Helvetica", "B", 9.5)
    pdf.cell(W * 0.5, 5, "Total Ammount %s" % rupiah(total), align="R", new_x="LMARGIN", new_y="NEXT")

    pdf.ln(1)

    # ===== TABLE =====
    col_no = 14
    col_item = 60
    col_detail = 78
    col_total = 18
    row_h = 5.4

    # header
    pdf.set_fill_color(230, 230, 230)
    pdf.set_font("Helvetica", "B", 9)
    y0 = pdf.get_y()
    pdf.cell(col_no, 6, "No", border=1, align="C", fill=True)
    pdf.cell(col_item, 6, "Item (s)", border=1, align="L", fill=True)
    pdf.cell(col_detail, 6, "Item", border=1, align="L", fill=True)
    pdf.cell(col_total, 6, "Total", border=1, align="C", fill=True)
    pdf.ln()

    def th(txt, w, h=row_h):
        pdf.cell(w, h, txt, border=1, align="L")

    def thb(txt, w, h=row_h):
        pdf.cell(w, h, txt, border=1, align="L")

    pdf.set_font("Helvetica", "", 8.5)
    row_h = 6.5
    total_shown = False
    for idx, (item, subs) in enumerate(items, start=1):
        # baris item utama — hanya item pertama yang isi kolom Total
        tot_txt = rupiah(total) if not total_shown else ""
        if tot_txt:
            total_shown = True
        pdf.cell(col_no, row_h, str(idx), border=1, align="C")
        pdf.cell(col_item, row_h, item, border=1, align="L")
        pdf.cell(col_detail, row_h, "", border=1)
        pdf.cell(col_total, row_h, tot_txt, border=1, align="R")
        pdf.ln()

    # Total Amount
    pdf.set_font("Helvetica", "B", 8.5)
    pdf.cell(col_no + col_item + col_detail, 6, "", border=0)
    pdf.cell(col_total, 6, "Total Amount", border=1, align="C")
    pdf.ln()
    pdf.set_x(pdf.l_margin + col_no + col_item + col_detail)
    pdf.cell(col_total, 6, rupiah(total), border=1, align="R")
    pdf.ln(6)

    # ===== Bank =====
    pdf.set_font("Helvetica", "B", 8.5)
    pdf.cell(W, 4.5, "Pembayaran Transfer ke:", new_x="LMARGIN", new_y="NEXT")
    pdf.set_font("Helvetica", "", 8)
    for bank, acc, name in BANKS:
        pdf.cell(W, 4.5, bank, new_x="LMARGIN", new_y="NEXT")
        pdf.cell(25, 4.5, "Account No.", new_x="END")
        pdf.cell(W - 25, 4.5, ":  %s" % acc, new_x="LMARGIN", new_y="NEXT")
        pdf.cell(25, 4.5, "Account Name", new_x="END")
        pdf.cell(W - 25, 4.5, ":  %s" % name, new_x="LMARGIN", new_y="NEXT")

    pdf.ln(4)

    # ===== Tanda tangan =====
    pdf.set_font("Helvetica", "", 8.5)
    pdf.cell(W * 0.5, 4.5, "Terima kasih atas kepercayaan Anda kepada kami.", new_x="END")
    pdf.cell(W * 0.5, 4.5, "Hormat kami,", align="R", new_x="LMARGIN", new_y="NEXT")
    pdf.ln(12)
    pdf.set_font("Helvetica", "B", 9)
    pdf.cell(W * 0.5, 5, "", new_x="END")
    pdf.cell(W * 0.5, 5, "CV. KREASI STUDIOSOFT", align="R", new_x="LMARGIN", new_y="NEXT")
    pdf.set_font("Helvetica", "", 8.5)
    pdf.cell(W * 0.5, 4.5, "", new_x="END")
    pdf.cell(W * 0.5, 4.5, "Uky Yanuhandoko", align="R", new_x="LMARGIN", new_y="NEXT")
    pdf.cell(W * 0.5, 4.5, "", new_x="END")
    pdf.cell(W * 0.5, 4.5, "Project Manager", align="R", new_x="LMARGIN", new_y="NEXT")

    fname = "Invoice_%d_%s.pdf" % (no, nama.replace(" ", "_").replace("(", "").replace(")", "").replace(",", "").replace("-", "_"))
    path = os.path.join(OUTDIR, fname)
    pdf.output(path)
    return path


# ============ GENERATE ============
paths = []
for i, (nama, kota, total, items) in enumerate(clients):
    no = INVOICE_NO + i
    p = add_invoice(nama, kota, total, items, no)
    paths.append((no, nama, total, p))

print("=== GENERATED %d INVOICES (format template) ===" % len(paths))
for no, nama, total, p in paths:
    print("No.%d %s -> %s" % (no, nama, rupiah(total)))
