# Skrip 5.1: reklasifikasi kemiringan lereng menjadi tiga kelas dan hitung luasnya. Penulis: Badar Mubarok Yogaswara
# Jalankan Skrip 3.1 lebih dulu (butuh Lereng_derajat.tif).
import os
import processing
from qgis.core import QgsVectorLayer

OUT = os.environ.get("B3_OUT", r"C:/kerja_b3")
os.makedirs(OUT, exist_ok=True)

# Tabel: batas bawah, batas atas, kelas baru. Aturan batas: bawah <= nilai < atas (RANGE_BOUNDARIES = 1)
tabel = [0, 5, 1,       # kelas 1 = datar   (0 sampai kurang dari 5 derajat)
         5, 15, 2,      # kelas 2 = landai  (5 sampai kurang dari 15 derajat)
         15, 90, 3]     # kelas 3 = curam   (15 derajat ke atas)
r = processing.run("native:reclassifybytable", {
    "INPUT_RASTER": OUT + "/Lereng_derajat.tif", "RASTER_BAND": 1,
    "TABLE": tabel, "RANGE_BOUNDARIES": 1, "NODATA_FOR_MISSING": True,
    "NO_DATA": 255, "DATA_TYPE": 0,          # 0 = Byte
    "OUTPUT": OUT + "/Lereng_kelas.tif"})

u = processing.run("native:rasterlayeruniquevaluesreport", {"INPUT": r["OUTPUT"], "BAND": 1,
                                                            "OUTPUT_TABLE": "TEMPORARY_OUTPUT"})
nama = {1: "Datar", 2: "Landai", 3: "Curam"}
print("Kelas | jumlah piksel | luas (ha)")
for f in u["OUTPUT_TABLE"].getFeatures():
    k = int(f["value"])
    print(k, nama.get(k, "NoData"), f["count"], round(f["count"] * 4 / 10000, 2))
