<?php

namespace App\Http\Controllers;

use App\Helpers\RemoveKarakter;
use App\Models\PangkatModel;
use App\Models\PegawaiModel;
use Illuminate\Http\Request;
use Yajra\DataTables\Facades\DataTables;

class PangkatController extends Controller
{
  /**
   * Display a listing of the resource.
   *
   * @return \Illuminate\Http\Response
   */
  public function index()
  {
    $pageConfigs = ['pageHeader' => false];
    $data = [
      'title' =>  'Pangkat',
      'result'    =>  PangkatModel::OrderBy('uuid', 'desc')->get(),
    ];

    return view('/content/pangkat/index', ['pageConfigs' => $pageConfigs], $data);
  }

  public function created_pangkat()
  {
    $pageConfigs = ['pageHeader' => false];
    $data = [
      'title' =>  'Pangkat',
    ];

    return view('/content/pangkat/created', ['pageConfigs' => $pageConfigs], $data);
  }

  public function edits_pangkat($id)
  {
    $check = PangkatModel::where('uuid',$id)->first();
    if(!$check) {
      return redirect()->to('pangkat/index');
    }
    $pageConfigs = ['pageHeader' => false];
    $data = [
      'title' =>  'Pangkat',
      'result'  =>  $check
    ];

    return view('/content/pangkat/edit', ['pageConfigs' => $pageConfigs], $data);
  }

  /**
   * Show the form for creating a new resource.
   *
   * @return \Illuminate\Http\Response
   */
  public function ambil_data(Request $request)
  {
    if ($request->ajax()) {
      $pangkat = PangkatModel::orderby('uuid', 'desc');
      $DataTables = DataTables::of($pangkat)
        ->addIndexColumn()
        ->addColumn('pangkat', function ($pangkat) {
          if ($pangkat) {
            $nama = $pangkat->pangkat;
          } else {
            $nama = '-';
          }
          return $nama;
        })
        ->addColumn('action', function ($action) {
          $no = $action->uuid;
          $method_edit = method_field('PUT');
          $edit =  url("pangkat/edit_pangkat");
          $updates = url('pangkat/edits_pangkat/' .$no);
          $method_hapus = method_field('DELETE');
          $csrf = csrf_field();
          $hapus = url("pangkat/hapus_pangkat");
          if ($action) {
            $aksi = "
                    <div class='dropdown'>
                <button type='button' class='btn btn-sm dropdown-toggle hide-arrow py-0' data-bs-toggle='dropdown'>
                <i class='fas fa-ellipsis-vertical'></i>
                </button>
                <div class='dropdown-menu dropdown-menu-end'>
                  <a class='dropdown-item' href='$updates' >
                    <i class='me-50 fas fa-pen'></i>
                    <span>Edit</span>
                  </a>
                  <a class='dropdown-item' href='#'  data-bs-toggle='modal'
                  data-bs-target='#hapus$no'>
                    <i class='me-50 fas fa-trash'></i>
                    <span>Delete</span>
                  </a>
                </div>
              </div>

<div class='modal fade' id='hapus$no' tabindex='-1' aria-hidden='true'>
  <div class='modal-dialog  modal-lg' role='document'>
    <form method='POST' enctype='multipart/form-data' class='modal-content' action='$hapus'>
      $csrf
      $method_hapus
      <div class='modal-header'>
        <input type='hidden' name='id' value='$no'>
        <h5 class='modal-title' id='modalFullTitle'>Hapus Pangkat</h5>
        <button type='button' class='btn-close' data-bs-dismiss='modal' aria-label='Close'></button>
      </div>
      <div class='modal-body'>
        <div class='p-2 text-center'>
          <h4>Apakah Anda Yakin Ingin Menghapus Data Ini!</h4>
        </div>
      </div>
      <div class='modal-footer'>
        <button type='button' class='btn btn-label-secondary' data-bs-dismiss='modal'>Close</button>
        <button type='submit' class='btn btn-primary'>Hapus</button>
      </div>
    </form>
  </div>
</div>

                    ";
          } else {
            $aksi = '-';
          }
          return $aksi;
        })
        ->rawColumns([
          'pangkat',
          'action'
        ])
        ->filter(function ($query) use ($request) {
          // Filtering berdasarkan input dari request
          if ($request->has('search') && !empty($request->input('search.value'))) {
            $searchValue = $request->input('search.value');
            $query->where(function ($innerQuery) use ($searchValue) {
              // Menambahkan kondisi pencarian ke dalam query
              // Sesuaikan dengan kolom yang ingin dicari
              $innerQuery->where('pangkat', 'LIKE', '%' . $searchValue . '%');
            });
          }
        })
        // ->make(true);
        ->toJson();
      return $DataTables;
    } else {
      abort(404);
    }
  }

  /**
   * Store a newly created resource in storage.
   *
   * @param  \Illuminate\Http\Request  $request
   * @return \Illuminate\Http\Response
   */
  public function store(Request $request)
  {
    $request->validate(
      [
        'pangkat'   =>  'required|max:255|unique:pangkat|string|alpha_num_dot_comma_space'
      ],
      [
        'pangkat.alpha_num_dot_comma_space' =>  'Nama Pangkat Tidak Valid',
        'pangkat.required'  =>  'Nama Pangkat Harus Di isi',
        'pangkat.max'   =>  'Karakter Nama Pangkat Terlalu Panjang',
        'pangkat.unique'    =>  'Nama Pangkat Sudah Ada',
        'pangkat.string'    =>  'Nama Pangkat Harus String'
      ]
    );

    $pangkats = RemoveKarakter::hapus_karakter($request->pangkat);

    try {
      $pangkat = new PangkatModel();
      $pangkat->pangkat = $pangkats;
      $pangkat->save();
      return redirect()->to('pangkat/index')->with("success", "Data Berhasil Ditambahkan");
    } catch (\Throwable $th) {
      return redirect()->to('pangkat/index')->with("error", "Data Gagal Ditambahkan");
    }
  }

  /**
   * Display the specified resource.
   *
   * @param  int  $id
   * @return \Illuminate\Http\Response
   */
  public function show($id)
  {
    //
  }

  /**
   * Show the form for editing the specified resource.
   *
   * @param  int  $id
   * @return \Illuminate\Http\Response
   */
  public function edit($id)
  {
    //
  }

  /**
   * Update the specified resource in storage.
   *
   * @param  \Illuminate\Http\Request  $request
   * @param  int  $id
   * @return \Illuminate\Http\Response
   */
  public function update(Request $request)
  {
    $request->validate(
      [
        'pangkat'   =>  'required|max:255|unique:pangkat|string|alpha_num_dot_comma_space'
      ],
      [
        'alpha_num_dot_comma_space' =>  'Nama Pangkat Tidak Valid',
        'required'  =>  'Nama Pangkat Harus Di isi',
        'max'   =>  'Karakter Nama Pangkat Terlalu Panjang',
        'unique'    =>  'Nama Pangkat Sudah Ada',
        'string'    =>  'Nama Pangkat Harus String'
      ]
    );
    $id = RemoveKarakter::remove_method_get($request->id);
    $check = PangkatModel::where("uuid", $id)->count();
    if (!$check || !isset($id)) {
      return redirect()->back()->with('error', "Data Gagal Diupdate");
    }

    $pangkats = RemoveKarakter::hapus_karakter($request->pangkat);

    try {
      PangkatModel::where("uuid", $id)->update([
        'pangkat'   =>  $pangkats
      ]);
      return redirect()->to('pangkat/index')->with("success", "Data Berhasil Diupdate");
    } catch (\Throwable $th) {
      return redirect()->to('pangkat/index')->with("error", "Data Gagal Diupdate");
    }
  }

  /**
   * Remove the specified resource from storage.
   *
   * @param  int  $id
   * @return \Illuminate\Http\Response
   */
  public function destroy(Request $request)
  {
    $id = RemoveKarakter::remove_method_get($request->id);
    $check = PangkatModel::where("uuid", $id)->count();
    if (!$check || !isset($id)) {
      return redirect()->back()->with('error', "Data Gagal Dihapus");
    }
    try {
      $result = PegawaiModel::where("uuid_pangkat", $id)->count();
      if ($result) {
        return redirect()->back()->with("error", "Data ini tidak boleh dihapus karena sudah berlasi");
      }
      PangkatModel::where("uuid", $id)->delete();
      return redirect()->back()->with("success", "Data Berhasil Dihapus");
    } catch (\Throwable $th) {
      return redirect()->back()->with("error", "Data Gagal Dihapus");
    }
  }
}
