<?php

class StranaspkLogframeOutput2025Controller extends BaseController
{
     public function get_all_logframe_output(){
        $db = $this->getDI()->get('databaseNewStranas2025');
        $db->begin();
        try {
            $query = "SELECT mko.id, mko.m_kl_aksi_id, mko.nama_output, mka.nama_aksi, mko.urutan_output, mka.urutan_aksi FROM m_kl_output AS mko LEFT JOIN m_kl_aksi AS mka ON mka.id = mko.m_kl_aksi_id";
            $result = $db->query($query);
            // Menggunakan fetchAll untuk mendapatkan hasil query
            $data = $result->fetchAll(PDO::FETCH_ASSOC);

            $db->commit();

            if (!empty($data)) {
                return $data;
            } else {
                return null;
            }
        }catch (Exception $e) {
            // Rollback transaksi jika terjadi kesalahan
            $db->rollback();

            return new SimpleResponse([
                'Message' => "Data tidak di temukan " . $e->getMessage()
            ]);
        }
     }

     public function submit_logframe_output(){
        $this->checkIsAuthenticated();
        $db = $this->getDI()->get('databaseNewStranas2025');
        
        $getParams = $this->request->getJsonRawBody(true);
        $nama_output = $getParams["nama_output"];
        $nomor_urut_output = $getParams["nomor_urut_output"];
        $m_kl_aksi_id = $getParams["m_kl_aksi_id"];
        $username = $getParams["username"];
        $db->begin();

        try{
            $this->setchange_by();
            $query = "INSERT INTO m_kl_output (m_kl_aksi_id, nama_output, urutan_output, created_at, updated_at) VALUES(:m_kl_aksi_id, :nama_output, :urutan_output, :created_at, :updated_at)";
 
            $values = [
             'm_kl_aksi_id' => $m_kl_aksi_id,
             'nama_output' => $nama_output,
             'urutan_output' => intval($nomor_urut_output),
             'created_at' => date('Y-m-d H:i:s'),
             'updated_at' => date('Y-m-d H:i:s')
            ];

           $db->execute($query, $values);

           $db->commit();

           return new SimpleResponse([
              'message' => "Sukses Insert Kedalam Database"
           ]);
        }catch(Exception $e){
            $db->rollback();

            return new SimpleResponse([
                'message' => "Gagal Mengupdate Data " . $e->getMessage()
            ]);
        }
     }

     public function edit_logframe_output(){
        $this->checkIsAuthenticated();
        $db = $this->getDI()->get('databaseNewStranas2025');
        
        $getParams = $this->request->getJsonRawBody(true);
        $nama_output = $getParams["nama_output"];
        $nomor_urut_output = $getParams["nomor_urut_output"];
        $m_kl_aksi_id = $getParams["m_kl_aksi_id"];
        $id = $getParams["id"];
        $username = $getParams["username"];
        $db->begin();

        try{
            $this->setchange_by();

            $query = "UPDATE m_kl_output SET m_kl_aksi_id = :m_kl_aksi_id, urutan_output = :urutan_output, nama_output = :nama_output, updated_at = :updated_at WHERE id = :id";
 
            $values = [
             'id' => $id,
             'nama_output' => $nama_output,
             'urutan_output' => $nomor_urut_output,
             'm_kl_aksi_id' => $m_kl_aksi_id,
             'updated_at' => date('Y-m-d H:i:s')
            ];

           $db->execute($query, $values);

           $db->commit();

            return new SimpleResponse([
                'message' => "Sukses Mengupdate Database"
            ]);
        }catch(Exception $e){
            $db->rollback();
            return new SimpleResponse([
                'message' => "Gagal Mengupdate Data " . $e->getMessage()
            ]);
        }
     }

     public function delete_logframe_output(){
        $this->checkIsAuthenticated();
        $db = $this->getDI()->get('databaseNewStranas2025');
        $getParams = $this->request->getJsonRawBody(true);
        $id = $getParams["id"];
        $username = $getParams["username"];
        $db->begin();

        try{

            $this->setchange_by();

            $query = "DELETE FROM m_kl_output WHERE id = :id";
 
            $values = [
             'id' => $id
            ];

            $db->execute($query, $values);

            $db->commit();

            return new SimpleResponse([
                'message' => "Sukses Delete data output"
            ]);
        }catch(Exception $e){
            $db->rollback();

            return new SimpleResponse([
                'Message' => "Gagal Mengupdate Data " . $e->getMessage()
            ]);
        }
     }

     public function search_logframe_output(){
        $this->checkIsAuthenticated();
        $db = $this->getDI()->get('databaseNewStranas2025');
        $getParams = $this->request->getJsonRawBody(true);
        // Eksekusi query dengan parameter binding
        $keyword = '%' . $getParams["keyword"] . '%';
        $db->begin();

        try{
            $query = "SELECT mko.id, mko.m_kl_aksi_id, mko.nama_output, mka.nama_aksi, mko.urutan_output, mka.urutan_aksi FROM m_kl_output AS mko LEFT JOIN m_kl_aksi AS mka ON mka.id = mko.m_kl_aksi_id WHERE mko.nama_output ILIKE :keyword";
 
            $values = [
              'keyword' => $keyword
            ];

            $result = $db->query($query, $values);
            // Menggunakan fetchAll untuk mendapatkan hasil query
            $data = $result->fetchAll(PDO::FETCH_ASSOC);

            $db->commit();

            // Menggunakan fetchAll untuk mendapatkan hasil query
            if (!empty($data)) {
                return new SimpleResponse($data);
            } else {
                return new SimpleResponse([]);
            }
        }catch(Exception $e){
            $db->rollback();

            return new SimpleResponse([
                'Message' => "Gagal Mengupdate Data " . $e->getMessage()
            ]);
        }
     }

     private function CheckNamaUser($username){
        $dbJaga = $this->getDI()->get('db');
        $dbJaga->begin();
        try {
            $query = "SELECT nama FROM um_user WHERE um_id = :um_id";
            $result = $dbJaga->query($query, [
                'um_id' => $username
            ]);
            // Menggunakan fetchAll untuk mendapatkan hasil query
            $data = $result->fetchAll(PDO::FETCH_ASSOC);

            $dbJaga->commit();

            if (!empty($data)) {
                return $data;
            } else {
                return null;
            }
        }catch(Exception $e){
            $dbJaga->rollback();
            return new SimpleResponse([
                'Message' => "Gagal Menampilkan Data" . $e->getMessage()
            ]);
        } 
    }

     private function setchange_by(){
        $db = $this->getDI()->get('databaseNewStranas2025');
        $user = $this->shared->user;
        $umId = $user->um_id;
        $namaUser = $this->CheckNamaUser($umId);
        $current_user = $namaUser[0]['nama'];
        $set_username = "UPDATE session_username SET nama = :nama WHERE id = 1";
        $value = [
            'nama' => $current_user
        ];
        $db->execute($set_username, $value);
    }

    public function read_output_by_aksi_id(){
        $this->checkIsAuthenticated();
        $db = $this->getDI()->get('databaseNewStranas2025');
        $getParams = $this->request->getJsonRawBody(true);
        $m_kl_aksi_id = $getParams['m_kl_aksi_id']; 
        $db->begin();
        try {
            $query = "SELECT * FROM m_kl_output Where m_kl_aksi_id = :id ORDER BY urutan_output";
            $values = [
                'id' => $m_kl_aksi_id
            ];
            $result = $db->query($query, $values);
            // Menggunakan fetchAll untuk mendapatkan hasil query
            $data = $result->fetchAll(PDO::FETCH_ASSOC);

            $db->commit();

            if (!empty($data)) {
                return new SimpleResponse($data);
            } else {
                return new SimpleResponse([]);
            }
        }catch (Exception $e) {
            // Rollback transaksi jika terjadi kesalahan
            $db->rollback();

            return new SimpleResponse([
                'Message' => "Data tidak di temukan " . $e->getMessage()
            ]);
        }
     }
}