# -*- coding: utf-8 -*-
"""Uji plugin tanpa jendela QGIS: iface tiruan. Jalankan: python-qgis.bat uji_plugin.py"""
import configparser, os, sys, zipfile
os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")
from qgis.core import QgsApplication, QgsVectorLayer
app = QgsApplication([], True)
app.initQgis()
AQ = os.path.dirname(os.path.abspath(__file__))
DATA = os.path.abspath(os.path.join(AQ, "..", "..", "..", "data-sintetis", "paket-m4", "Petak_KPH.gpkg"))
sys.path.insert(0, AQ)
catat = []

class Bar:
    def pushMessage(self, judul, teks, level=None, duration=0): catat.append((judul, teks, str(level)))
class Iface:
    def __init__(self): self.layer = None; self.menu = []; self.bar = Bar()
    def mainWindow(self): return None
    def addPluginToMenu(self, m, a): self.menu.append(m)
    def removePluginMenu(self, m, a): self.menu.remove(m)
    def addToolBarIcon(self, a): self.menu.append("toolbar")
    def removeToolBarIcon(self, a): self.menu.remove("toolbar")
    def activeLayer(self): return self.layer
    def messageBar(self): return self.bar

import plugin_ringkas_kph as p
iface = Iface()
pl = p.classFactory(iface)
pl.initGui(); print("menu setelah initGui:", iface.menu)
pl.run(); print("tanpa layer ->", catat[-1][1])
iface.layer = QgsVectorLayer(DATA, "Petak_KPH", "ogr"); print("layer valid:", iface.layer.isValid())
pl.run(); print("dengan layer ->", catat[-1][1])
pl.unload(); print("menu setelah unload:", iface.menu)
cp = configparser.ConfigParser(); cp.read(os.path.join(AQ, "plugin_ringkas_kph", "metadata.txt"), encoding="utf8")
wajib = ["name","qgisMinimumVersion","description","about","version","author","email","repository"]
print("metadata lengkap:", all(cp["general"].get(k) for k in wajib))
z = os.path.join(AQ, "keluaran", "plugin_ringkas_kph-0.1.0.zip"); os.makedirs(os.path.dirname(z), exist_ok=True)
with zipfile.ZipFile(z, "w", zipfile.ZIP_DEFLATED) as zf:
    for r, _, fs in os.walk(os.path.join(AQ, "plugin_ringkas_kph")):
        if "__pycache__" in r: continue
        for f in fs: zf.write(os.path.join(r, f), os.path.relpath(os.path.join(r, f), AQ))
print("isi zip:", zipfile.ZipFile(z).namelist())
app.exitQgis()
