# -*- coding: utf-8 -*-
"""M2 Bab 1: memuat tabel PostGIS sebagai layer lewat PyQGIS, dan mengekspor layer ke PostGIS lewat Processing.
Penulis: Badar Mubarok Yogaswara. Koneksi dari variabel lingkungan PGHOST, PGPORT, PGUSER, PGDATABASE (tanpa kata sandi di skrip)."""
import os
import sys
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
import _inisialisasi  # noqa: F401  (hanya perlu bila dijalankan di luar jendela QGIS)
from qgis.core import QgsDataSourceUri, QgsVectorLayer, QgsProject
import processing

paket = sys.argv[1]
uri = QgsDataSourceUri()
uri.setConnection(os.environ["PGHOST"], os.environ["PGPORT"], os.environ["PGDATABASE"], os.environ["PGUSER"], "")
uri.setDataSource("kph", "petak", "geom", "", "gid")          # skema, tabel, kolom geometri, filter, kolom kunci
lyr = QgsVectorLayer(uri.uri(False), "Petak (PostGIS)", "postgres")
print("sah:", lyr.isValid(), "| jumlah fitur:", lyr.featureCount(), "| CRS:", lyr.crs().authid(), "| geometri:", lyr.wkbType())
if not lyr.isValid():
    sys.exit("Layer kph.petak tidak sah: periksa PGHOST, PGPORT, PGUSER, PGDATABASE dan skema kph.")

# layer dengan filter SQL (hanya petak jati)
uri.setSql("jenis_tegakan = 'Jati'")
lyr2 = QgsVectorLayer(uri.uri(False), "Petak jati", "postgres")
print("petak jati:", lyr2.featureCount())
QgsProject.instance().addMapLayer(lyr)

# ekspor satu layer GeoPackage ke tabel baru lewat Processing (alat GDAL)
hasil = processing.run("gdal:importvectorintopostgisdatabasenewconnection", {
    "INPUT": os.path.join(paket, "Fasilitas.gpkg|layername=Fasilitas"), "GTYPE": 3,
    "HOST": os.environ["PGHOST"], "PORT": os.environ["PGPORT"], "USER": os.environ["PGUSER"], "DBNAME": os.environ["PGDATABASE"],
    "PASSWORD": "", "SCHEMA": "kph", "TABLE": "fasilitas_uji", "PK": "gid", "GEOCOLUMN": "geom", "DIM": 0,
    "OVERWRITE": True, "APPEND": False, "ADDFIELDS": False, "LAUNDER": False, "INDEX": False, "SKIPFAILURES": False,
    "MAKEVALID": False, "PROMOTETOMULTI": False, "PRECISION": True})
print("ekspor selesai:", hasil)
