# [SKRIP 6.2: Menjalankan model .model3 dari Python, berulang dengan jarak berbeda]
# Penulis: Badar Mubarok Yogaswara
# Prasyarat: jalankan SKRIP 6.1 dulu (atau simpan model dari Graphical Modeler dengan nama sama).
import processing
from qgis.core import QgsVectorLayer, QgsProcessingModelAlgorithm, QgsProcessingException

DATA = "D:/Latihan/paket-i4"
HASIL = "D:/Latihan/hasil_i4"

batas = QgsVectorLayer(DATA + "/Batas_KPH.gpkg", "Batas_KPH", "ogr")
sungai = QgsVectorLayer(DATA + "/Sungai.gpkg", "Sungai", "ogr")

# 1. Muat model dari berkas
model = QgsProcessingModelAlgorithm()
print("Model terbaca?", model.fromFile(HASIL + "/Sempadan_Sungai_per_KPH.model3"))
model.initAlgorithm({})
print("Nama model:", model.displayName())
print("Parameter:", [p.name() for p in model.parameterDefinitions()])

# 2. Jalankan berulang dengan tiga lebar sempadan. Model yang sama, angka berbeda.
for jarak in (20, 30, 50):
    hasil = processing.run(model, {
        "KPH": batas, "SUNGAI": sungai, "JARAK": jarak,
        "sempadan_per_kph": "TEMPORARY_OUTPUT"})
    lyr = hasil["sempadan_per_kph"]
    total = sum(f["LUAS_HA"] for f in lyr.getFeatures())
    print("Lebar %2d m -> %d potongan, total %.2f ha" % (jarak, lyr.featureCount(), total))

# 3. Jarak yang tidak sah: model berhenti dan memberi pesan
try:
    processing.run(model, {"KPH": batas, "SUNGAI": sungai, "JARAK": 0,
                           "sempadan_per_kph": "TEMPORARY_OUTPUT"})
    print("Jarak 0: model berjalan (tidak seharusnya)")
except QgsProcessingException as e:
    print("Jarak 0: model berhenti ->", str(e).replace("\n", " | "))
