# -*- coding: utf-8 -*-
# [SKRIP I3.2] Membuat GeoPackage survei kosong (layer Titik_Survei + tabel acuan Ref_Kondisi dan Ref_Jenis)
# Penulis: Badar Mubarok Yogaswara
# Dijalankan di Python Console QGIS atau python-qgis.bat. Hasil: Survei_KPH.gpkg di folder KELUAR.
import os
from qgis.core import (QgsVectorLayer, QgsVectorFileWriter, QgsCoordinateReferenceSystem, QgsProject, QgsFeature)

KELUAR = r"D:/KPH_Contoh/Survei_KPH.gpkg"     # ganti dengan folder proyek Anda
os.makedirs(os.path.dirname(KELUAR), exist_ok=True)
assert not os.path.exists(KELUAR), "Berkas sudah ada: ganti nama atau pindahkan dulu agar tidak tertimpa"

# 1. Titik_Survei: titik berkoordinat UTM 49S dengan sepuluh field
skema = ("Point?crs=EPSG:32749"
         "&field=ID_Survei:string(10)&field=KPH:string(20)&field=Jenis:string(20)&field=Kondisi:string(20)"
         "&field=Tinggi_Phn:double&field=Diameter_cm:double&field=Tgl_Survei:date"
         "&field=Surveyor:string(30)&field=Akurasi_m:double&field=Foto:string(100)")
sementara = QgsVectorLayer(skema, "Titik_Survei", "memory")
opsi = QgsVectorFileWriter.SaveVectorOptions()
opsi.driverName = "GPKG"
opsi.layerName = "Titik_Survei"
opsi.fileEncoding = "UTF-8"
hasil = QgsVectorFileWriter.writeAsVectorFormatV3(sementara, KELUAR, QgsProject.instance().transformContext(), opsi)
assert hasil[0] == QgsVectorFileWriter.NoError, hasil

# 2. Dua tabel acuan (tanpa geometri) ditambahkan ke berkas yang sama
acuan = {"Ref_Kondisi": ("Kondisi", ["Sehat", "Terserang Hama", "Tebangan Liar"]),
         "Ref_Jenis": ("Jenis", ["Jati", "Mahoni", "Sengon"])}
for nama, (kolom, nilai) in acuan.items():
    tabel = QgsVectorLayer("None?field=%s:string(20)" % kolom, nama, "memory")
    tabel.startEditing()
    for v in nilai:
        f = QgsFeature(tabel.fields())
        f[kolom] = v
        tabel.addFeature(f)
    tabel.commitChanges()
    o = QgsVectorFileWriter.SaveVectorOptions()
    o.driverName = "GPKG"
    o.layerName = nama
    o.actionOnExistingFile = QgsVectorFileWriter.CreateOrOverwriteLayer      # tambah layer, jangan timpa berkas
    h = QgsVectorFileWriter.writeAsVectorFormatV3(tabel, KELUAR, QgsProject.instance().transformContext(), o)
    assert h[0] == QgsVectorFileWriter.NoError, h

# 3. Periksa isi berkas
for nama in ["Titik_Survei", "Ref_Kondisi", "Ref_Jenis"]:
    lyr = QgsVectorLayer(KELUAR + "|layername=" + nama, nama, "ogr")
    print(nama, "valid:", lyr.isValid(), "| baris:", lyr.featureCount(), "| field:", [f.name() for f in lyr.fields()])
