# [SKRIP 2.1: Validasi Otomatis Titik Ground-Truth vs Poligon Klasifikasi]
# Penulis: Badar Mubarok Yogaswara

import processing
from qgis.core import QgsProject

print("🔍 Memulai Validasi Lapangan Otomatis...")

layer_survei = QgsProject.instance().mapLayersByName('Titik_Survei')[0]
layer_klasifikasi = QgsProject.instance().mapLayersByName('Poligon_Sawah')[0]

# Melakukan Spatial Join (Menarik atribut poligon ke titik survei yang berada di dalamnya)
hasil_join = processing.run("native:joinattributesbylocation", {
    'INPUT': layer_survei,
    'JOIN': layer_klasifikasi,
    'PREDICATE': [0], # 0 = Intersects
    'JOIN_FIELDS': ['Kelas_Citra'], # Field dari citra satelit
    'METHOD': 0,
    'DISCARD_NONMATCHING': False,
    'PREFIX': 'GIS_',
    'OUTPUT': 'memory:Validasi_Hasil'
})['OUTPUT']

# Menambahkan layer hasil ke QGIS
QgsProject.instance().addMapLayer(hasil_join)

# Menghitung Akurasi
titik_cocok = 0
total_titik = hasil_join.featureCount()

for fitur in hasil_join.getFeatures():
    if str(fitur['Kondisi']).lower() == str(fitur['GIS_Kelas_Citra']).lower():
        titik_cocok += 1

akurasi = (titik_cocok / total_titik) * 100 if total_titik > 0 else 0

print(f"📊 Laporan Validasi: {titik_cocok} dari {total_titik} titik cocok.")
print(f"🎯 Akurasi Keseluruhan (Overall Accuracy): {akurasi:.2f}%")
