# -*- coding: utf-8 -*-
"""Plugin Ringkas KPH. Penulis: Badar Mubarok Yogaswara"""
import os

from qgis.core import Qgis, QgsCoordinateTransformContext, QgsDistanceArea, QgsWkbTypes
from qgis.PyQt.QtGui import QAction, QIcon


def ringkas_layer(layer):
    """Mengembalikan (jumlah objek, luas total dalam hektare). Luas dihitung di elipsoid WGS 84."""
    da = QgsDistanceArea()
    da.setSourceCrs(layer.crs(), QgsCoordinateTransformContext())
    da.setEllipsoid("WGS84")
    jumlah = 0
    luas_m2 = 0.0
    for f in layer.getFeatures():
        jumlah += 1
        if layer.geometryType() == QgsWkbTypes.GeometryType.PolygonGeometry:
            luas_m2 += da.measureArea(f.geometry())
    return jumlah, luas_m2 / 10000.0


class RingkasKPH:
    def __init__(self, iface):
        self.iface = iface
        self.action = None

    def initGui(self):
        ikon = os.path.join(os.path.dirname(__file__), "icon.png")
        self.action = QAction(QIcon(ikon), "Ringkas layer aktif", self.iface.mainWindow())
        self.action.triggered.connect(self.run)
        self.iface.addPluginToMenu("&Ringkas KPH", self.action)
        self.iface.addToolBarIcon(self.action)

    def unload(self):
        self.iface.removePluginMenu("&Ringkas KPH", self.action)
        self.iface.removeToolBarIcon(self.action)
        self.action = None

    def run(self):
        layer = self.iface.activeLayer()
        if layer is None or not hasattr(layer, "getFeatures"):
            self.iface.messageBar().pushMessage("Ringkas KPH", "Pilih dulu satu layer vektor di panel Layers.",
                                                level=Qgis.MessageLevel.Warning, duration=6)
            return
        jumlah, luas_ha = ringkas_layer(layer)
        self.iface.messageBar().pushMessage("Ringkas KPH", "%s: %d objek, luas %.2f ha." % (layer.name(), jumlah, luas_ha),
                                            level=Qgis.MessageLevel.Info, duration=8)
