<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;

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

class KelompokController extends Controller
{
    function getDetailKelompok(Request $request)
    {
        $tanggal = date('Y-m-d');
        $kelompok_id = $request->kelompok_id;
        $kelompok = DB::selectOne("SELECT m.kelompok_id, m.sk, nama_kelompok, ketua_id, sekretaris_id, bendahara_id, nama_lengkap, m.desa_id, nama_desa, m.sk, m.alamat, m.rt, m.rw, m.nomer_telp FROM data_kelompok_master m JOIN data_desa_master d ON m.desa_id = d.desa_id LEFT JOIN data_anggota_master a ON m.ketua_id = a.anggota_id WHERE m.kelompok_id = ?", [$kelompok_id]);
        $anggota = DB::select("SELECT * FROM data_anggota_master a JOIN data_desa_master d ON a.desa = d.desa_id WHERE kelompok_id = ?", [$kelompok_id]);
        $pinjaman = DB::select("SELECT rekening, kelompok_id, kredit_produk, plafon, bunga, jkw, tgl_mulai, tgl_jatuh_tempo, tgl_tutup, nomer_pk, admin, provisi, kolektibilitas, date_created, date_updated, user, status, angsuran_pokok, angsuran_bunga, HitungPinjamanSaldo(rekening, '$tanggal') as bakidebet FROM data_kredit_master km WHERE kelompok_id = ?", [$kelompok_id]);
        return response()->json([
            "kelompok" => $kelompok,
            "anggota" => $anggota,
            "pinjaman" => $pinjaman
        ]);
    }

    function getDaftarKelompok(Request $request)
    {
        if (isset($request->desa)) {
            $sql = "SELECT k.kelompok_id, k.nama_kelompok, IFNULL(k.ketua_id,'') as ketua_id, IFNULL(a.nama_lengkap,'') as nama_ketua, k.desa_id, d.nama_desa, (SELECT COUNT(*) FROM data_anggota_master WHERE kelompok_id = k.kelompok_id) as jumlah_anggota ,k.status FROM data_kelompok_master k LEFT JOIN data_anggota_master a ON k.ketua_id = a.anggota_id LEFT JOIN data_desa_master d ON k.desa_id = d.desa_id WHERE k.status= 1 AND k.desa_id = ? ";
            $kelompok = DB::select($sql, [$request->desa]);
        } else {
            $sql = "SELECT k.kelompok_id, k.nama_kelompok, IFNULL(k.ketua_id,'') as ketua_id, IFNULL(a.nama_lengkap,'') as nama_ketua, k.desa_id, d.nama_desa, (SELECT COUNT(*) FROM data_anggota_master WHERE kelompok_id = k.kelompok_id) as jumlah_anggota ,k.status FROM data_kelompok_master k LEFT JOIN data_anggota_master a ON k.ketua_id = a.anggota_id LEFT JOIN data_desa_master d ON k.desa_id = d.desa_id where k.status=1";
            $kelompok = DB::select($sql);
        }
        return json_encode($kelompok);
    }

    function getDaftarAnggotaKelompok(Request $request)
    {
        $kelompok_id = $request->kelompok_id;
        $sql = "SELECT * FROM data_anggota_master a JOIN data_desa_master d ON a.desa = d.desa_id WHERE kelompok_id = '$kelompok_id'";
        $kelompok = DB::select($sql);
        return json_encode($kelompok);
    }

    function createDataMasterKelompok(Request $request)
    {
        $desa_id = $request->desa_id;
        $count = DB::table('data_kelompok_master')->where("desa_id", $desa_id)->count();
        $nomer_urut = str_pad($count + 1, 3, "0", STR_PAD_LEFT);
        $kode_desa = str_pad($desa_id, 2, "0", STR_PAD_LEFT);
        $kelompok_id = "K$kode_desa$nomer_urut";

        $duplikat_kelompok = DB::table('data_kelompok_master')->where('nama_kelompok', $request->nama_kelompok)->where('desa_id', $desa_id)->count();
        if ($duplikat_kelompok != 0) {
            return json_encode([
                'success' => false,
                'error' => "Duplikat nama kelompok dan desa"
            ]);
        }
        DB::beginTransaction();
        try {
            $data_kelompok = [
                'kelompok_id' => $kelompok_id,
                'nama_kelompok' => $request->nama_kelompok,
                'ketua_id' => $request->ketua_id,
                'bendahara_id' => $request->bendahara_id,
                'sekretaris_id' => $request->sekretaris_id,
                'desa_id' => $desa_id,
                'date_created' => date('Y-m-d H:i:s'),
                'date_updated' => date('Y-m-d H:i:s'),
                'user' => $request->user,
                'sk' => $request->sk ?? "",
                'nomer_telp' => $request->nomer_telp ?? "",
                'alamat' => $request->alamat ?? "",
                'rt' => $request->rt ?? "",
                'rw' => $request->rw ?? "",
                'status' => 1,
            ];
            DB::table('data_kelompok_master')->insert($data_kelompok);

            for ($i = 0; $i < count($request->daftar_anggota); $i++) {
                $data = $request->daftar_anggota[$i];
                DB::table("data_anggota_master")->where('anggota_id', $data['anggota_id'])->update([
                    'kelompok_id' => $kelompok_id
                ]);
            }

            DB::commit();
            return json_encode([
                'success' => true,
                'message' => 'Data berhasil disimpan',
                'kode_kelompok' => $kelompok_id,
                'data_kelompok' => $data_kelompok
            ]);
        } catch (Exception $error) {
            DB::rollBack();
            return json_encode([
                'success' => false,
                'error' => $error
            ]);
        }
    }

    function updateDataMasterKelompok(Request $request)
    {
        $kelompok_id = $request->kelompok_id;
        // return json_encode([
        //     'success' => true,
        //     'message' => 'Data berhasil disimpan',
        //     'kode_kelompok' => $data
        // ]);

        // $duplikat_kelompok = DB::table('data_kelompok_master')->where('nama_kelompok', $request->nama_kelompok)->where('desa_id', $request->desa_id)->count();
        // if ($duplikat_kelompok != 0) {
        //     return json_encode([
        //         'success' => false,
        //         'error' => "Duplikat nama kelompok dan desa"
        //     ]);
        // }
        DB::beginTransaction();
        try {
            $data = [
                'nama_kelompok' => $request->nama_kelompok,
                'ketua_id' => $request->ketua_id == null ? "" : $request->ketua_id,
                'desa_id' => $request->desa_id,
                'date_updated' => date('Y-m-d H:i:s'),
                'user' => $request->user,
                'sk' => $request->sk,
                'nomer_telp' => $request->nomer_telp ?? "",
                'alamat' => $request->alamat ?? "",
                'rt' => $request->rt ?? "",
                'rw' => $request->rw ?? "",
            ];
            DB::table('data_kelompok_master')->where('kelompok_id', $kelompok_id)->update($data);

            // for ($i = 0; $i < count($request->daftar_anggota); $i++) {
            //     $data = $request->daftar_anggota[$i];
            //     DB::table("data_anggota_master")->where('anggota_id', $data['anggota_id'])->update([
            //         'kelompok_id' => $kelompok_id
            //     ]);
            // }

            DB::commit();
            return json_encode([
                'success' => true,
                'message' => 'Data berhasil disimpan',
                'data_kelompok' => $data
            ]);
        } catch (Exception $error) {
            DB::rollBack();
            return json_encode([
                'success' => false,
                'error' => $error
            ]);
        }
    }

    function setKetuaKelompok(Request $request)
    {
        $kelompok_id = $request->kelompok_id;
        $anggota_id = $request->anggota_id;
        DB::table('data_kelompok_master')->where('kelompok_id', $kelompok_id)->update([
            'ketua_id' => $anggota_id
        ]);
    }

    function tambahAnggotaKelompok(Request $request)
    {
        $kelompok_id = $request->kelompok_id;
        $anggota_id = $request->anggota_id;
        try {
            DB::table('data_anggota_master')->where('anggota_id', $anggota_id)->update([
                'kelompok_id' => $kelompok_id
            ]);
            return json_encode([
                "success" => true,
                "message" => "Anggota berhasil ditambah",
                "kelompok_id" => $kelompok_id,
                "anggota_id" => $anggota_id
            ]);
        } catch (Exception $error) {
            return json_encode([
                "success" => false,
                "error" => $error
            ]);
        }
    }

    function hapusAnggotaKelompok(Request $request)
    {
        $anggota_id = $request->anggota_id;
        $sql = "SELECT anggota_id, am.kelompok_id, ketua_id FROM data_anggota_master am JOIN data_kelompok_master km ON am.kelompok_id = km.kelompok_id WHERE am.anggota_id = '$anggota_id'";
        $anggota = DB::selectOne($sql);
        DB::beginTransaction();
        try {
            if ($anggota->ketua_id == $anggota_id) {
                DB::table('data_kelompok_master')->where('kelompok_id', $anggota->kelompok_id)->update([
                    "ketua_id" => null
                ]);
            }
            DB::table('data_anggota_master')->where('anggota_id', $anggota_id)->update([
                'kelompok_id' => null
            ]);
            DB::commit();
        } catch (Exception $error) {
            DB::rollBack();
        }
    }

    function setJabatanAnggota(Request $request)
    {
        $kelompok_id = $request->kelompok_id;
        $anggota_id = $request->anggota_id;
        $jabatan = $request->jabatan;
        $data = [];
        try {
            if ($jabatan == 'anggota') {
                $kelompok = DB::table('data_kelompok_master')->where('kelompok_id', $kelompok_id)->first();
                if ($kelompok->ketua_id == $anggota_id) {
                    $data = ["ketua_id" => null];
                } else if ($kelompok->sekretaris_id == $anggota_id) {
                    $data = ["sekretaris_id" => null];
                } else if ($kelompok->bendahara_id == $anggota_id) {
                    $data = ["bendahara_id" => null];
                }
            } else
            if ($jabatan == 'ketua') {
                $data = ["ketua_id" => $anggota_id];
            } else
            if ($jabatan == 'sekretaris') {
                $data = ["sekretaris_id" => $anggota_id];
            } else
            if ($jabatan == 'bendahara') {
                $data = ["bendahara_id" => $anggota_id];
            }
            DB::table('data_kelompok_master')->where('kelompok_id', $kelompok_id)->update($data);
            return response()->json([
                "message" => "Sukses"
            ]);
        } catch (Exception $error) {
            return response()->json([
                "error" => $error->getMessage()
            ]);
        }
    }
}
