from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
from pptx.enum.shapes import MSO_SHAPE

def build_siphln_presentation():
    prs = Presentation()
    prs.slide_width = Inches(13.333)
    prs.slide_height = Inches(7.5)

    # Theme Colors
    COLOR_BG = RGBColor(15, 23, 42)       # Slate Dark
    COLOR_CARD = RGBColor(30, 41, 59)     # Slate Card
    COLOR_TEAL = RGBColor(13, 148, 136)   # Primary Teal
    COLOR_WHITE = RGBColor(241, 245, 249) # Text Light
    COLOR_MUTED = RGBColor(148, 163, 184)# Text Muted

    blank_layout = prs.slide_layouts[6]

    # Data 13 Slide
    slides_data = [
        {"num": "SLIDE 1", "title": "SIPHLN", "sub": "Sistem Informasi Pembiayaan Hibah Luar Negeri", "desc": "Ditjen P2P - Kementerian Kesehatan RI\nVersi 2.0 | Status: In Development"},
        {"num": "SLIDE 2", "title": "Daftar Isi", "sub": "Agenda Presentasi SIPHLN", "desc": "1. Latar Belakang & Tujuan\n2. Tech Stack & Arsitektur\n3. Model Data & Relasi Database\n4. Modul & Rencana Fitur\n5. Autentikasi & Keamanan\n6. Roadmap & Evaluasi Teknis"},
        {"num": "SLIDE 3", "title": "Latar Belakang", "sub": "Pendahuluan & Permasalahan", "desc": "Tantangan Utama:\n• Data proyek PHLN terpisah di berbagai spreadsheet Excel.\n• Pelacakan realisasi anggaran triwulan terhambat.\n• Tidak ada dashboard visualisasi kinerja terpusat.\n\nSolusi SIPHLN:\n• Database terpusat untuk portofolio proyek PHLN.\n• Monitoring realisasi anggaran TW1-TW4 secara presisi.\n• Dashboard KPI interaktif."},
        {"num": "SLIDE 4", "title": "Tujuan Sistem", "sub": "Target Strategis Aplikasi", "desc": "• Database terpusat proyek PHLN Ditjen P2P [Selesai]\n• Pengelolaan kegiatan & indikator kinerja [Selesai]\n• Pelacakan realisasi anggaran triwulan [Selesai]\n• Dashboard KPI dan grafik analitik [Selesai]\n• Manajemen role pengguna (RBAC) [Selesai]\n• Ekspor data laporan (Excel/CSV) [Proses]\n• Fitur reset password mandiri [Proses]"},
        {"num": "SLIDE 5", "title": "Tech Stack & Lingkungan", "sub": "Teknologi yang Terimplementasi", "desc": "• Backend: Laravel 12 (PHP >= 8.2)\n• Database: MySQL (Port 3300)\n• Architecture: Server-Rendered Multi-Page App (Blade)\n• Styling: Tailwind CSS 4\n• Interactivity: Alpine.js 3 & Chart.js\n• Environment: Apache (XAMPP)"},
        {"num": "SLIDE 6", "title": "Arsitektur Sistem", "sub": "Struktur Aplikasi SIPHLN", "desc": "[Client Browser] (Tailwind + Alpine.js + Chart.js)\n        ↓ HTTP / HTTPS\n[Web Server Apache] (XAMPP Environment)\n        ↓ Routing & Middleware\n[Laravel Router] → [RBAC Middleware] → [Controllers] → [Eloquent ORM]\n        ↓ Data Query\n[MySQL Database] (16 Tables)"},
        {"num": "SLIDE 7", "title": "Model Data & Relasi (ERD)", "sub": "Struktur Database Utama", "desc": "Relasi Transaksional:\n• m_organization_unit (1) ---> (N) t_projects\n• t_projects (1) ---> (N) t_activities\n• t_activities (1) ---> (N) t_realizations\n\nRelasi Reference:\n• m_lender (N) ---> (1) t_projects (FK: lender_id)\n• m_funding_type (N) ---> (1) t_projects (FK: funding_type_id)"},
        {"num": "SLIDE 8", "title": "Statistik Database", "sub": "Ringkasan Struktur Tabel", "desc": "Metrics Database:\n• Total Tabel: 16 | Eloquent Models: 10\n• Migrations: 8 | Master Tables: 6\n\nTabel Utama:\n• t_projects (12 Kolom, SoftDeletes)\n• t_activities (17 Kolom, SoftDeletes)\n• t_realizations (7 Kolom, SoftDeletes)\n• users (11 Kolom, SoftDeletes)"},
        {"num": "SLIDE 9", "title": "Modul yang Sudah Berjalan", "sub": "Fitur-Fitur Terimplementasi", "desc": "1. Autentikasi & Approval User (Login, Register, Admin Approval)\n2. Executive Dashboard (KPI Cards, Bar/Doughnut Chart)\n3. Manajemen Proyek (Nomor MoU, Alokasi Anggaran 2026-2028)\n4. Manajemen Kegiatan (Target Performance, Indikator IKK/IKP)\n5. Realisasi Triwulanan (Monitoring Capaian TW1-TW4)\n6. User Management (Panel Admin Approval & Role Setting)"},
        {"num": "SLIDE 10", "title": "Rencana Fitur Lanjutan", "sub": "Pengembangan Tahap Selanjutnya", "desc": "• Export Excel / CSV Report (Download rekapitulasi data) [Proses]\n• Reset Password Mandiri (Verifikasi via Email) [Proses]\n• CRUD Master Data UI (Panel kelola unit & lender) [Rencana]\n• Audit Log System (Tracking perubahan data) [Rencana]"},
        {"num": "SLIDE 11", "title": "Autentikasi & Keamanan", "sub": "Akses & Otorisasi Pengguna", "desc": "Alur Registrasi:\nRegistrasi Akun → Status Pending Approval → Verifikasi Super Admin → Akses Aktif\n\nRole Matrix (RBAC):\n• Executive Dashboard: Super Admin (Ya) | Staff (Ya)\n• CRUD Proyek & Kegiatan: Super Admin (Ya) | Staff (Ya)\n• Approval & User Management: Super Admin (Ya) | Staff (Tidak)"},
        {"num": "SLIDE 12", "title": "Roadmap & Evaluasi Teknis", "sub": "Timeline & Known Issues", "desc": "Timeline:\n• Agt 2026: Core Development (Auth, CRUD Modul, Dashboard)\n• Sep 2026: Stabilisasi & Migration Fixes\n• Q4 2026: Fitur Lanjutan (Export, Audit Log)\n\nKnown Issues:\n• Master Table Migration File perlu dilengkapi\n• Optimalisasi Query & Pagination pada tabel transaksional"},
        {"num": "SLIDE 13", "title": "Penutup", "sub": "Terima Kasih", "desc": "SIPHLN - Sistem Informasi Pembiayaan Hibah Luar Negeri\nDirektorat Jenderal P2P - Kementerian Kesehatan RI\n\nTech Stack: Laravel 12 + MySQL\nStatus: In Development (Versi 2.0)"}
    ]

    for data in slides_data:
        slide = prs.slides.add_slide(blank_layout)

        # Background Fill
        bg = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, 0, 0, prs.slide_width, prs.slide_height)
        bg.fill.solid()
        bg.fill.fore_color.rgb = COLOR_BG
        bg.line.fill.background()

        # Header Box
        tx_box = slide.shapes.add_textbox(Inches(1), Inches(0.6), Inches(11.33), Inches(1.2))
        tf = tx_box.text_frame
        tf.word_wrap = True
        
        p0 = tf.paragraphs[0]
        p0.text = data["num"] + " — " + data["title"]
        p0.font.size = Pt(28)
        p0.font.bold = True
        p0.font.color.rgb = COLOR_TEAL

        p1 = tf.add_paragraph()
        p1.text = data["sub"]
        p1.font.size = Pt(16)
        p1.font.color.rgb = COLOR_MUTED

        # Body Card Frame
        card = slide.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE, Inches(1), Inches(2.0), Inches(11.33), Inches(4.8))
        card.fill.solid()
        card.fill.fore_color.rgb = COLOR_CARD
        card.line.color.rgb = COLOR_TEAL

        # Body Text
        body_box = slide.shapes.add_textbox(Inches(1.3), Inches(2.2), Inches(10.7), Inches(4.4))
        btf = body_box.text_frame
        btf.word_wrap = True
        
        lines = data["desc"].split("\n")
        for i, line in enumerate(lines):
            if i == 0:
                p = btf.paragraphs[0]
            else:
                p = btf.add_paragraph()
            p.text = line
            p.font.size = Pt(15)
            p.font.color.rgb = COLOR_WHITE

    prs.save("SIPHLN_Presentasi_13_Slide.pptx")
    print("Berhasil membuat file PowerPoint: SIPHLN_Presentasi_13_Slide.pptx")

if __name__ == "__main__":
    build_siphln_presentation()