<?php

namespace App\Http\Controllers\Admins;

use App\Helpers\ResponseFormatter;
use App\Http\Controllers\Controller;
use App\Models\MasterSatuan;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;

class MasterSatuanController extends Controller
{
    public function index()
    {
        return view('pages.admin.master_satuan.index');
    }


    public function getDataSatuan()
    {
        $data = MasterSatuan::get();

        return datatables()->of($data)
            ->addColumn('action', function ($data) {
                return '
                <button class="btn btn-sm btn-warning btn-edit-satuan" data-satuan=' . $data . ' data-idSatuan=' . $data->id . '><i class="fas fa-edit"></i></button>
                <button class="btn btn-sm btn-danger btn-hapus-satuan" data-satuan=' . $data . ' data-idSatuan=' . $data->id . '><i class="fas fa-trash"></i></button>
            ';
            })
            ->rawColumns(['action' => 'action'])
            ->addIndexColumn()
            ->make(true);
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        // validation
        $validator = Validator::make($request->all(), [
            'nama_satuan'  => 'required',
            'simbol' => 'required',
        ], [
            'nama_satuan.required' => 'Nama Satuan tidak boleh kosong!',
            'simbol.required' => 'Simbol satuan tidak boleh kosong!',
        ]);

        // check validation
        if ($validator->fails()) {
            return ResponseFormatter::error($validator->errors()->first());
        }

        try {
            DB::beginTransaction();

            // create new data
            $satuan = MasterSatuan::create([
                'nama_satuan' => $request->nama_satuan,
                'simbol' => $request->simbol,
            ]);

            DB::commit();
            return ResponseFormatter::success($satuan, "Satuan berhasil ditambahkan");
        } catch (\Throwable $th) {
            DB::rollBack();
            return ResponseFormatter::error($th->getMessage());
        }
    }

    /**
     * Display the specified resource.
     */
    public function show(string $id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(string $id)
    {
        // get data from satuan
        $satuan = MasterSatuan::findOrFail($id);
        return ResponseFormatter::success([
            'satuan' => $satuan
        ]);
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, string $id)
    {

        // validation
        $validator = Validator::make($request->all(), [
            'nama_satuan_edit'  => 'required',
            'simbol_edit' => 'required',
        ], [
            'nama_satuan_edit.required' => 'Nama Satuan tidak boleh kosong!',
            'simbol_edit.required' => 'Simbol satuan tidak boleh kosong!',
        ]);

        // check validation
        if ($validator->fails()) {
            return ResponseFormatter::error($validator->errors()->first());
        }

        try {
            DB::beginTransaction();

            // create new data
            $satuan = MasterSatuan::findOrFail($id);
            $satuan->update([
                'nama_satuan' => $request->nama_satuan_edit,
                'simbol' => $request->simbol_edit
            ]);

            DB::commit();
            return ResponseFormatter::success($satuan, "Satuan berhasil diubah");
        } catch (\Throwable $th) {
            DB::rollBack();
            return ResponseFormatter::error($th->getMessage());
        }
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(string $id)
    {
        // get data from satuan
        $satuan = MasterSatuan::findOrFail($id);

        // check satuan
        if (!$satuan) {
            return ResponseFormatter::error("Data satuan tidak ditemukan!");
        }

        // delete satuan
        $satuan->delete();

        return ResponseFormatter::success(null, "Satuan berhasil dihapus!");
    }
}