# Buku "Python untuk GIS", Bab 28: Pola dan Improvisasi: Kerangka Siap Salin dan Cara Mengubahnya
# Pola 28.1: Muat, ubah, simpan
import os
from qgis.core import QgsVectorLayer, QgsVectorFileWriter, QgsProject

DATA = os.environ.get("PY_DATA", r"D:/Latihan")
HASIL = os.environ.get("PY_HASIL", r"D:/Latihan/hasil")
os.makedirs(HASIL, exist_ok=True)

# 1. Muat
petak = QgsVectorLayer(DATA + "/paket-b2/Petak_KPH.gpkg|layername=Petak", "Petak", "ogr")
assert petak.isValid(), "Layer tidak terbuka. Cek DATA dan nama berkas."
print("Muat:", petak.featureCount(), "petak")

# 2. Ubah: saring jenis Jati
petak.setSubsetString("\"JENIS\" = 'Jati'")
print("Setelah disaring:", petak.featureCount(), "petak")

# 3. Simpan
opsi = QgsVectorFileWriter.SaveVectorOptions()
opsi.driverName = "GPKG"
opsi.layerName = "Petak_Jati"
hasil = QgsVectorFileWriter.writeAsVectorFormatV3(
    petak, HASIL + "/petak_jati.gpkg", QgsProject.instance().transformContext(), opsi)
print("Simpan berhasil:", hasil[0] == QgsVectorFileWriter.WriterError.NoError)
petak.setSubsetString("")
