from html import escape
from pathlib import Path
from zipfile import ZipFile
import re
import xml.etree.ElementTree as ET

ROOT = Path('.')
DB = ROOT / 'database'
OUT = ROOT / 'html' / 'bab-02-berbasis-data-database.html'

xlsx = DB / 'rekap tahunan indikator makro. 2020-2025.xlsx'
pdrb_pdf = DB / 'produk-domestik-regional-bruto-kabupaten-lampung-timur-menurut-lapangan-usaha-2021-2025.pdf'
pptx = DB / 'SWOT dan CMU RSUD KH AHMAD HANAFIAH-SUKADANA.pptx'
sofifi_pdf = DB / 'Laporan FS RSU Sofifi 10112020.pdf'


def read_xlsx_rows(path: Path, sheet_name='Sheet1'):
    ns = {
        'a': 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',
        'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',
    }
    with ZipFile(path) as z:
        shared = []
        if 'xl/sharedStrings.xml' in z.namelist():
            root = ET.fromstring(z.read('xl/sharedStrings.xml'))
            for si in root.findall('a:si', ns):
                shared.append(''.join(t.text or '' for t in si.findall('.//a:t', ns)))
        wb = ET.fromstring(z.read('xl/workbook.xml'))
        rel_root = ET.fromstring(z.read('xl/_rels/workbook.xml.rels'))
        rels = {r.attrib['Id']: r.attrib['Target'] for r in rel_root}
        target = None
        for sh in wb.findall('.//a:sheet', ns):
            if sh.attrib.get('name') == sheet_name:
                rid = sh.attrib['{http://schemas.openxmlformats.org/officeDocument/2006/relationships}id']
                target = 'xl/' + rels[rid].lstrip('/')
                break
        if not target:
            raise RuntimeError(f'Sheet {sheet_name} not found')
        root = ET.fromstring(z.read(target))
        rows = []
        for row in root.findall('.//a:sheetData/a:row', ns):
            vals = []
            for c in row.findall('a:c', ns):
                v = c.find('a:v', ns)
                val = '' if v is None else (v.text or '')
                if c.attrib.get('t') == 's' and val:
                    val = shared[int(val)]
                val = val.replace('\t', '').strip()
                vals.append(val)
            rows.append(vals)
        return rows


def fmt(v):
    if v is None or v == '':
        return ''
    s = str(v).strip()
    try:
        # preserve comma decimals already written as strings
        if ',' in s:
            return s
        f = float(s)
        return f'{f:.2f}'.replace('.', ',')
    except Exception:
        return s

rows = read_xlsx_rows(xlsx, 'Sheet1')
macro = []
current = ''
for r in rows:
    if len(r) >= 2 and r[0].isdigit() and r[1]:
        current = r[1]
        if len(r) >= 8 and any(c for c in r[2:8]):
            macro.append([current] + [fmt(c) for c in r[2:8]])
    elif len(r) >= 8 and r[1].startswith('-'):
        macro.append([current + ' ' + r[1]] + [fmt(c) for c in r[2:8]])

# keep rows that matter most for BAB 2 narrative
keep_terms = ['Pertumbuhan', 'PDRB Per Kapita', 'Gini', 'Pengangguran', 'Miskin', 'Pangan', 'Investasi']
macro = [r for r in macro if any(t.lower() in r[0].lower() for t in keep_terms)]

# Sheet2 PDRB headline values
sheet2 = read_xlsx_rows(xlsx, 'Sheet2')
pdrb_head = []
for r in sheet2:
    if len(r) >= 2 and r[0].startswith('-'):
        pdrb_head.append([r[0], fmt(r[1])])

# Extract useful strategic points from pptx slides 5-8
ppt_points = []
with ZipFile(pptx) as z:
    ns = {'a': 'http://schemas.openxmlformats.org/drawingml/2006/main'}
    for idx in [5, 6, 8]:
        name = f'ppt/slides/slide{idx}.xml'
        if name not in z.namelist():
            continue
        root = ET.fromstring(z.read(name))
        texts = [t.text.strip() for t in root.findall('.//a:t', ns) if t.text and t.text.strip()]
        ppt_points.extend(texts)

def bullets_after(label, stop_labels):
    out = []
    active = False
    for t in ppt_points:
        if t == label:
            active = True
            continue
        if active and t in stop_labels:
            break
        if active and len(t) > 20 and not t.startswith('Central Medical Unit'):
            out.append(t)
    return out[:8]

strengths = bullets_after('Strengths (Kekuatan)', ['Weaknesses (Kelemahan)', 'Opportunities (Peluang)', 'Threats (Ancaman)'])
opps = bullets_after('Opportunities (Peluang)', ['Threats (Ancaman)', 'ARAH STRATEGIS RENSTRA 5 TAHUN'])
threats = bullets_after('Threats (Ancaman)', ['MATRlKS STRATEGI SWOT', 'ARAH STRATEGIS RENSTRA 5 TAHUN'])

rows_html = '\n'.join(
    '<tr><td>' + '</td><td>'.join(escape(c) for c in r) + '</td></tr>' for r in macro
)
pdrb_head_html = ''.join(f'<li><b>{escape(k)}</b>: Rp{escape(v)} miliar</li>' for k, v in pdrb_head)

def ul(items):
    return '<ul>' + ''.join(f'<li>{escape(i)}</li>' for i in items) + '</ul>'

html = f'''<!doctype html>
<html lang="id">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>BAB 2 - Gambaran Umum dan Analisis Situasi Eksternal</title>
  <style>
    @page {{ size: A4; margin: 18mm 16mm; }}
    :root {{ --ink:#172033; --muted:#667085; --line:#d0d5dd; --green:#0f766e; --soft:#ecfdf3; --blue:#1d4ed8; }}
    * {{ box-sizing:border-box; }}
    body {{ margin:0; background:#eef2f7; color:var(--ink); font-family:Arial, Helvetica, sans-serif; line-height:1.58; }}
    main {{ max-width:980px; margin:24px auto; background:white; padding:54px 64px; box-shadow:0 12px 34px rgba(16,24,40,.12); }}
    .meta {{ text-align:center; color:var(--green); font-size:12px; letter-spacing:.12em; text-transform:uppercase; font-weight:700; }}
    h1 {{ text-align:center; font-size:25px; line-height:1.25; margin:8px 0 28px; text-transform:uppercase; }}
    h2 {{ font-size:18px; margin:30px 0 10px; padding-left:12px; border-left:5px solid var(--green); }}
    h3 {{ font-size:15px; margin:20px 0 8px; color:#344054; }}
    p {{ text-align:justify; margin:0 0 12px; }}
    .box {{ background:#f8fafc; border:1px solid #e4e7ec; border-radius:12px; padding:14px 16px; margin:16px 0; }}
    .highlight {{ background:var(--soft); border-left:5px solid #12b76a; padding:12px 14px; margin:16px 0; }}
    table {{ width:100%; border-collapse:collapse; font-size:12.5px; margin:10px 0 18px; }}
    th,td {{ border:1px solid var(--line); padding:7px 8px; vertical-align:top; }}
    th {{ background:#f0fdfa; text-align:center; }}
    td:not(:first-child) {{ text-align:right; white-space:nowrap; }}
    ul {{ margin-top:6px; padding-left:22px; }}
    li {{ margin:4px 0; }}
    .caption {{ text-align:center; font-weight:700; color:#344054; margin:18px 0 8px; }}
    .refs li {{ font-size:12.5px; color:#475467; }}
    @media print {{ body {{ background:white; }} main {{ margin:0; max-width:none; padding:0; box-shadow:none; }} }}
  </style>
</head>
<body>
<main>
  <div class="meta">Laporan Studi Kelayakan CMU RSUD KH Ahmad Hanafiah - Sukadana</div>
  <h1>BAB 2<br>Gambaran Umum dan Analisis Situasi Eksternal</h1>

  <h2>2.1 Regulasi dan Kebijakan Nasional</h2>
  <p>Pengembangan Central Medical Unit (CMU) perlu ditempatkan dalam arah kebijakan nasional bidang kesehatan, khususnya transformasi layanan rujukan, penguatan layanan prioritas, integrasi sistem rujukan, pemenuhan standar bangunan dan prasarana rumah sakit, keselamatan pasien, serta penguatan layanan JKN/BPJS. CMU diarahkan bukan hanya sebagai pembangunan fisik, tetapi sebagai pusat layanan terintegrasi yang memperbaiki alur pasien, mempercepat respons kegawatdaruratan, dan meningkatkan kemampuan RSUD dalam menangani kasus akut serta penyakit tidak menular prioritas.</p>
  <p>Dalam konteks Kabupaten Lampung Timur, kebijakan tersebut relevan karena rumah sakit daerah memegang fungsi sosial dan fungsi rujukan. Peningkatan kapasitas RSUD membantu mengurangi rujukan keluar daerah, menekan biaya tidak langsung pasien, dan memperkuat pemerataan akses layanan kesehatan spesialistik.</p>

  <h2>2.2 Gambaran Umum Kabupaten Lampung Timur</h2>
  <p>Kabupaten Lampung Timur merupakan wilayah dengan basis ekonomi agraris, sebaran penduduk yang luas, dan kebutuhan akses pelayanan kesehatan yang cepat serta dekat. Kondisi geografis dan karakter ekonomi daerah menjadikan RSUD KH Ahmad Hanafiah - Sukadana sebagai simpul penting pelayanan rujukan kabupaten. Peningkatan layanan terintegrasi melalui CMU diharapkan memperkuat peran RSUD sebagai rumah sakit rujukan regional modern.</p>
  <div class="highlight">
    <b>Implikasi untuk CMU:</b> layanan IGD modern, ICU/ICCU, radiologi/laboratorium cepat, dan layanan jantung terpadu menjadi penting untuk mengurangi keterlambatan penanganan pasien dan menekan kebutuhan rujukan keluar daerah.
  </div>

  <h2>2.3 Kondisi Sosial Ekonomi Wilayah</h2>
  <p>Data makro ekonomi menunjukkan adanya pemulihan dan penguatan ekonomi Lampung Timur setelah periode kontraksi. Peningkatan PDRB per kapita, penurunan kemiskinan, serta pertumbuhan ekonomi tanpa migas menjadi indikator bahwa permintaan terhadap layanan kesehatan yang lebih bermutu akan terus meningkat. Namun, fungsi sosial RSUD tetap harus dijaga karena sebagian masyarakat masih berada pada kelompok rentan dan bergantung pada skema JKN/BPJS.</p>
  <div class="box">
    <b>PDRB ADHB Kabupaten Lampung Timur Tahun 2025</b>
    <ul>{pdrb_head_html}</ul>
    <small>Sumber: database/rekap tahunan indikator makro. 2020-2025.xlsx dan database/produk-domestik-regional-bruto-kabupaten-lampung-timur-menurut-lapangan-usaha-2021-2025.pdf.</small>
  </div>

  <h2>2.4 Indikator Makro Ekonomi 2020-2025</h2>
  <p class="caption">Tabel 2.1 Indikator Makro Ekonomi Kabupaten Lampung Timur Tahun 2020-2025</p>
  <table>
    <thead><tr><th>Indikator</th><th>2020</th><th>2021</th><th>2022</th><th>2023</th><th>2024</th><th>2025</th></tr></thead>
    <tbody>{rows_html}</tbody>
  </table>
  <p>Berdasarkan tabel di atas, ekonomi Lampung Timur menunjukkan penguatan. Pertumbuhan ekonomi tanpa migas tahun 2025 mencapai 7,25 persen, lebih tinggi dibanding pertumbuhan dengan migas sebesar 4,65 persen. PDRB per kapita juga meningkat dari tahun ke tahun, sementara persentase penduduk miskin turun menjadi 12,15 persen pada 2025. Pola ini memperkuat argumentasi bahwa peningkatan layanan kesehatan daerah perlu dilakukan secara bertahap, terukur, dan tetap memperhatikan keterjangkauan masyarakat.</p>

  <h2>2.5 Gambaran Umum Kesehatan</h2>
  <p>Kebutuhan layanan kesehatan wilayah dipengaruhi oleh beban penyakit menular, penyakit tidak menular, kecelakaan, kasus maternal, dan kebutuhan layanan rujukan. Penyakit tidak menular seperti hipertensi, diabetes, penyakit jantung, stroke, dan kanker menjadi faktor penting dalam perencanaan CMU. Karena itu, penguatan layanan jantung, kegawatdaruratan, ICU/ICCU, diagnostik cepat, dan rehabilitasi medik perlu menjadi prioritas desain layanan.</p>
  <p>Dokumen strategi RSUD menempatkan layanan jantung sebagai layanan unggulan. Hal ini selaras dengan peluang eksternal berupa tingginya prevalensi penyakit kardiovaskular dan kebutuhan layanan jantung regional.</p>

  <h2>2.6 Sistem Rujukan dan Jejaring Fasilitas Kesehatan</h2>
  <p>CMU diharapkan memperkuat posisi RSUD KH Ahmad Hanafiah dalam sistem rujukan regional. Integrasi IGD, diagnostik cepat, ICU/ICCU, OK emergensi, rawat inap KRIS, farmasi satelit, radiologi, laboratorium, dan sistem informasi rumah sakit akan memperbaiki koordinasi layanan dari pasien masuk sampai pasien dirawat atau dirujuk.</p>
  <p>Dengan konsep one stop service, CMU dapat mengurangi waktu tunggu, mengurangi perpindahan pasien yang tidak perlu, serta memperjelas alur komando klinis pada kasus gawat darurat.</p>

  <h2>2.7 Analisis Situasi Eksternal</h2>
  <h3>Peluang dan Faktor Pendorong</h3>
  {ul(opps)}
  <h3>Kekuatan Internal yang Mendukung Respons Eksternal</h3>
  {ul(strengths)}
  <h3>Ancaman dan Risiko Eksternal</h3>
  {ul(threats)}
  <p>Secara keseluruhan, peluang eksternal lebih kuat apabila RSUD mampu memperkuat kesiapan SDM, alat kesehatan, pembiayaan operasional, tata kelola BLUD, dan digitalisasi. Tantangan utama pengembangan CMU berada pada biaya investasi, keberlanjutan pemeliharaan alat, ketergantungan tarif JKN, dan ketersediaan tenaga spesialis.</p>

  <h2>2.8 Kesimpulan BAB 2</h2>
  <p>Analisis eksternal menunjukkan bahwa pengembangan CMU RSUD KH Ahmad Hanafiah memiliki dasar kebutuhan yang kuat. Pertumbuhan ekonomi daerah, penurunan kemiskinan, kebutuhan layanan rujukan, tren penyakit tidak menular, dan arah transformasi layanan kesehatan nasional mendukung pengembangan layanan terintegrasi. CMU perlu dirancang sebagai pusat layanan akut dan rujukan yang modern, efisien, aman, serta berkelanjutan secara operasional.</p>

  <h2>Rujukan Data Folder Database</h2>
  <ul class="refs">
    <li>{escape(str(xlsx))} — sumber indikator makro ekonomi 2020-2025 dan PDRB 2025.</li>
    <li>{escape(str(pdrb_pdf))} — publikasi PDRB Kabupaten Lampung Timur menurut lapangan usaha 2021-2025.</li>
    <li>{escape(str(pptx))} — sumber visi, misi, SWOT, dan arah strategis pengembangan CMU RSUD KH Ahmad Hanafiah.</li>
    <li>{escape(str(sofifi_pdf))} — acuan format dan kedalaman BAB 2 laporan FS rujukan.</li>
  </ul>
</main>
</body>
</html>
'''

OUT.parent.mkdir(exist_ok=True)
OUT.write_text(html, encoding='utf-8')
print(OUT)
