# [SKRIP 1.2: Membaca fitur dan atribut, memilih dengan ekspresi, menulis CSV]
# Penulis: Badar Mubarok Yogaswara
import csv
import os
from qgis.core import QgsProject, QgsVectorLayer

DATA = "D:/Latihan/paket-i4"
HASIL = "D:/Latihan/hasil_i4"
os.makedirs(HASIL, exist_ok=True)

batas = QgsVectorLayer(DATA + "/Batas_KPH.gpkg", "Batas_KPH", "ogr")
QgsProject.instance().addMapLayer(batas)

# 1. Satu fitur = satu baris tabel atribut. getFeatures() membacanya satu per satu.
baris = []
for fitur in batas.getFeatures():
    nama = fitur["NAMA_KPH"]
    luas_ha = fitur.geometry().area() / 10000      # m2 menjadi hektare (CRS harus berupa meter)
    baris.append((nama, round(luas_ha, 2)))
    print(nama, round(luas_ha, 2), "ha")

total = sum(luas for _, luas in baris)
print("Total:", total, "ha")

# 2. Memilih fitur dengan ekspresi, sama seperti Select by Expression
batas.selectByExpression('"NAMA_KPH" = \'KPH Beta\'')
print("Terpilih:", batas.selectedFeatureCount(), "fitur")
for fitur in batas.selectedFeatures():
    print("  ->", fitur["NAMA_KPH"])
batas.removeSelection()

# 3. Menulis hasil ke berkas CSV
jalur = HASIL + "/luas_kph.csv"
with open(jalur, "w", newline="", encoding="utf-8") as f:
    penulis = csv.writer(f)
    penulis.writerow(["NAMA_KPH", "LUAS_HA"])
    penulis.writerows(baris)
print("CSV tersimpan:", os.path.exists(jalur))
