<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;

use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class DesaController extends Controller
{
    function GetDaftarDesa()
    {
        $sql = "SELECT * FROM data_desa_master";
        $desa = DB::select($sql);
        return $desa;
    }

    function getDataDesa(Request $request)
    {
        $date = date('Y-m-d');
        $sql = "SELECT dm.*, ref.nama_perkiraan as coa_nama, HitungPerkSaldo(ref.kode_perkiraan, '$date', ref.jurnal, ref.`level`) as coa_saldo ,(SELECT COUNT(*) FROM data_anggota_master am WHERE am.desa = dm.desa_id ) as jumlah_anggota, (SELECT COUNT(*) FROM data_kelompok_master km WHERE km.desa_id = dm.desa_id ) as jumlah_kelompok FROM data_desa_master dm LEFT JOIN ref_perkiraan ref ON dm.coa = ref.kode_perkiraan ORDER BY nama_desa";
        $desa = DB::select($sql);
        return json_encode([
            "success" => true,
            "data" => $desa
        ]);
    }

    function getDetailDataDesa(Request $request)
    {
        $desa_id = $request->desa_id;
        $date = date('Y-m-d');

        $desa = DB::selectOne(
            "SELECT dm.* ,ref.nama_perkiraan as coa_nama, HitungPerkSaldo(ref.kode_perkiraan, ?, ref.jurnal, ref.`level`) as coa_saldo ,(SELECT COUNT(*) FROM data_anggota_master am WHERE am.desa = dm.desa_id ) as jumlah_anggota, (SELECT COUNT(*) FROM data_kelompok_master km WHERE km.desa_id = dm.desa_id ) as jumlah_kelompok FROM data_desa_master dm LEFT JOIN ref_perkiraan ref ON dm.coa = ref.kode_perkiraan WHERE desa_id = ? ORDER BY nama_desa",
            [$date, $desa_id]
        );

        $anggota = DB::table('data_anggota_master')->where('desa', $desa_id)->orderBy('nama_lengkap')->get();

        $kelompok = DB::select(
            "SELECT km.*, nama_lengkap as nama_ketua ,(SELECT COUNT(*) FROM data_anggota_master WHERE kelompok_id = km.kelompok_id ) as jumlah_anggota FROM data_kelompok_master km LEFT JOIN data_anggota_master am ON km.ketua_id = am.anggota_id WHERE desa_id = ?",
            [$desa_id]
        );

        $riwayat = DB::table('data_trans_jurnal')
            ->where('kode_perkiraan', $desa->coa)
            ->where('status', 1)
            ->where('trans_tglbuku', '>', '2023-01-02')
            ->orderBy('trans_tglbuku')
            ->get();

        $perangkat = DB::table('data_perangkat_desa')->where('id_desa', $desa_id)->get();

        $saldo = 0;

        for ($i = 0; $i < count($riwayat); $i++) {
            $saldo += $riwayat[$i]->kredit - $riwayat[$i]->debet;
            $riwayat[$i]->saldo = $saldo;
        }

        return json_encode([
            "success" => true,
            "desa" => $desa,
            "kelompok" => $kelompok,
            "anggota" => $anggota,
            // 'riwayat' => $riwayat,
            'perangkat' => $perangkat,
        ]);
    }

    function getAnggotaDesa(Request $request)
    {
        $anggota = DB::select("SELECT anggota.*, kelompok.nama_kelompok, desa.nama_desa FROM data_anggota_master anggota LEFT JOIN data_kelompok_master kelompok ON anggota.kelompok_id = kelompok.kelompok_id JOIN data_desa_master desa ON anggota.desa = desa.desa_id where anggota.desa = ?", [$request->desa_id]);
        return response()->json($anggota);
    }

    function createOrUpdateDataDesa(Request $request)
    {
        $desa_id = $request->desa_id;

        try {
            $data = [
                "nama_desa" => $request->nama_desa,
                "kepala_desa" => $request->kepala_desa,
                "coa" => $request->coa,
            ];

            if (!isset($desa_id)) {
                DB::table('data_desa_master')->insert($data);
            } else {
                DB::table('data_desa_master')->where('desa_id', $desa_id)->update($data);
            }

            return json_encode([
                "success" => true,
                "message" => "Data berhasil disimpan"
            ]);
        } catch (Exception $error) {
            return json_encode([
                "success" => false,
                "error" => $error->getMessage()
            ]);
        }
    }

    function getRiwayatSetoranModal(Request $request)
    {
        $desa_id = $request->desa_id;

        try {
            $desa = DB::table('data_desa_master')->where('desa_id', $desa_id)->first();
            if ($desa->coa != null) {
                $jurnal = DB::table('data_trans_jurnal')
                    ->where('kode_perkiraan', $desa->coa)
                    ->where('status', 1)
                    ->where('trans_tglbuku', '>', '2023-01-02')
                    ->orderBy('trans_tglbuku')
                    ->get();
            } else {
                $jurnal = [];
            }
            return response()->json([
                'success' => true,
                'desa' => $desa,
                'data' => $jurnal
            ]);
        } catch (Exception $error) {
            return response()->json([
                'success' => false,
                'error' => $error->getMessage(),
            ]);
        }
    }
}
