# -*- coding: utf-8 -*-
# [SKRIP I3.9] Dua surveyor bekerja luring dari salinan yang sama. Skrip ini menunjukkan mengapa nomor ID otomatis
# "maksimum + 1" bisa bentrok, lalu menggabungkan hasil keduanya dengan Processing dan mencari ID ganda.
# Penulis: Badar Mubarok Yogaswara
# Jalankan setelah skrip I3.2 dan I3.4 (butuh Survei_KPH.gpkg beserta gayanya). Dijalankan di Python Console QGIS.
import os
import shutil
import processing
from collections import Counter
from qgis.core import QgsVectorLayer, QgsVectorLayerUtils, QgsGeometry, QgsPointXY, QgsProject

KERJA = r"D:/KPH_Contoh"
ASLI = KERJA + "/Survei_KPH.gpkg"
punya = {}
for nama, (x, y) in {"surveyor1": (312050, 9996050), "surveyor2": (312150, 9996060)}.items():
    salinan = "%s/%s.gpkg" % (KERJA, nama)
    shutil.copy(ASLI, salinan)                                   # tiap surveyor membawa salinan sendiri
    lyr = QgsVectorLayer(salinan + "|layername=Titik_Survei", nama, "ogr")
    lyr.loadDefaultStyle()                                       # ID otomatis datang dari gaya yang tersimpan
    lyr.startEditing()
    f = QgsVectorLayerUtils.createFeature(lyr, QgsGeometry.fromPointXY(QgsPointXY(x, y)))
    f["Kondisi"] = "Sehat"
    f["Tinggi_Phn"] = 12.0
    lyr.addFeature(f)
    assert lyr.commitChanges(), lyr.commitErrors()
    punya[nama] = lyr
    print("%s membuat ID: %s" % (nama, f["ID_Survei"]))

gabungan = processing.run("native:mergevectorlayers", {
    "LAYERS": [punya["surveyor1"], punya["surveyor2"]], "CRS": "EPSG:32749", "OUTPUT": "memory:Gabungan"})["OUTPUT"]
hitung = Counter(f["ID_Survei"] for f in gabungan.getFeatures())
print("Jumlah baris setelah digabung:", gabungan.featureCount())
print("ID ganda:", {k: v for k, v in hitung.items() if v > 1})
