# Skrip 7.1: rekap akhir untuk Kepala Seksi dari lapisan Petak_Inventarisasi (QGIS Python Console)
# Penulis: Badar Mubarok Yogaswara
# Jalankan Skrip 5.1 dan 6.1 lebih dulu (menghasilkan Petak_Inventarisasi.gpkg di folder keluaran).
import csv
import os
import processing
from qgis.core import QgsVectorLayer

KELUAR = os.environ.get("B2_KELUAR", r"C:/KPH_Contoh/keluaran")
lap = QgsVectorLayer(KELUAR + "/Petak_Inventarisasi.gpkg|layername=Petak_Inventarisasi", "Petak_Inventarisasi", "ogr")
print("Baris:", lap.featureCount())

# 1. Rekap per KPH dengan alat "Statistics by categories"
rek = processing.run("qgis:statisticsbycategories", {
    "INPUT": lap, "VALUES_FIELD_NAME": "inv_JML_POHON", "CATEGORIES_FIELD_NAME": ["NAMA_KPH"], "OUTPUT": "memory:"})["OUTPUT"]
print("Kolom rekap:", [f.name() for f in rek.fields()])
for f in rek.getFeatures():
    print(f["NAMA_KPH"], "| jumlah petak berisi data:", f["count"], "| total pohon:", f["sum"], "| rata-rata:", round(f["mean"], 1))

# 2. Petak yang datanya belum lengkap
kosong = [f["KODE_PETAK"] for f in lap.getFeatures() if f["inv_JML_POHON"] is None]
print("Petak tanpa data inventarisasi:", kosong)

# 3. Jati kelas umur Tua, diurutkan menurut volume per hektare
lap.selectByExpression("\"JENIS\" = 'Jati' AND \"KELAS_UMUR\" = 'Tua'")
print("Jati Tua terpilih:", lap.selectedFeatureCount())
for f in sorted(lap.selectedFeatures(), key=lambda x: -x["VOL_HA"]):
    print("  ", f["KODE_PETAK"], f["NAMA_KPH"], f["VOL_HA"], "m3/ha")

# 4. Ekspor yang terpilih ke GeoPackage dan ke CSV
processing.run("native:saveselectedfeatures", {"INPUT": lap, "OUTPUT": KELUAR + "/Jati_Tua.gpkg"})
with open(KELUAR + "/Jati_Tua.csv", "w", newline="", encoding="utf-8") as fh:
    w = csv.writer(fh)
    w.writerow(["KODE_PETAK", "NAMA_KPH", "LUAS_HA", "UMUR", "POHON_HA", "VOL_HA"])
    for f in lap.selectedFeatures():
        w.writerow([f["KODE_PETAK"], f["NAMA_KPH"], f["LUAS_HA"], f["UMUR"], f["POHON_HA"], f["VOL_HA"]])
hasil = QgsVectorLayer(KELUAR + "/Jati_Tua.gpkg", "Jati_Tua", "ogr")
print("Berkas Jati_Tua.gpkg:", hasil.featureCount(), "objek | Jati_Tua.csv ada:", os.path.exists(KELUAR + "/Jati_Tua.csv"))
