<?php

namespace Devvime\Kiichi\Controllers;

use Devvime\Kiichi\Engine\ControllerService;
use Devvime\Kiichi\Models\{{$value[1]}}Model;

class {{$value[1]}}Controller extends ControllerService {

    private static ${$value[1]}Model;

    public function __construct()
    {
        self::${$value[1]}Model = new {{$value[1]}}Model();
    }

    public function index($req, $res) {
        try {
            $result = $this->paginate($req, self::${$value[1]}Model->select('*'));
            $res->json($result);
        } catch (\Throwable $th) {
            $res->json([
                'status' => 400, 
                'error' => true,
                'message' => $th->getMessage()
            ]);
        }
    }

    public function find($req, $res)
    {
        try {
            $result = {{$value[1]}}Model::find($req->params->id);
            if ($result == null) {
                $res->json(["status"=>404, "error"=>true, "message"=>"Register Not Found..."]);
                exit;
            }
            $res->json([
                "staus"=>200,
                "success"=>true,
                "data"=>$result
            ]);
        } catch (\Throwable $th) {
            $res->json([
                'status' => 400, 
                'error' => true,
                'message' => $th->getMessage()
            ]);
        }
    }

    public function store($req, $res) {
        try {
            $data = $this->bindValues($req->body, self::${$value[1]}Model);        
            $result = $data->save();        
            if ($result) {
                $res->json([
                    "staus"=>200,
                    "success"=>true,
                    "message"=>"Successfully created!",
                    "data"=>$result
                ]);
            }
        } catch (\Throwable $th) {
            $res->json([
                'status' => 400, 
                'error' => true,
                'message' => $th->getMessage()
            ]);
        }
    }

    public function update($req, $res) {
        try {
            $data = {{$value[1]}}Model::find($req->params->id);
            if ($data == null) {
                $res->json(["status"=>404, "error"=>true, "message"=>"Register Not Found..."]);
                exit;
            }
            $data = $this->bindValues($req->body, $data);
            $result = $data->save();
            if ($result) {
                $this->find($req, $res);
            }
        } catch (\Throwable $th) {
            $res->json([
                'status' => 400, 
                'error' => true,
                'message' => $th->getMessage()
            ]);
        }
    }

    public function destroy($req, $res) {
        try {
            $data = {{$value[1]}}Model::find($req->params->id);
            if ($data == null) {
                $res->json(["status"=>404, "error"=>true, "message"=>"Register Not Found..."]);
                exit;
            }
            $result = $data->delete();
            if ($result) {
                $res->json([
                    "staus"=>200,
                    "success"=>true,
                    "message"=>"Successfully deleted!",
                    "data"=>$result
                ]);
            }
        } catch (\Throwable $th) {
            $res->json([
                'status' => 400, 
                'error' => true,
                'message' => $th->getMessage()
            ]);
        }
    }
}
