<?php

namespace App\Http\Controllers;

use App\Models\{AssignMaterial,AssignTools,ToolsResource};
use Illuminate\Http\Request;
use Yajra\Datatables\Datatables;
class AssignToolsController extends Controller
{
    public function add(Request $request){
        $this->validate($request, [
            'activity_id'  => 'required',
            'tools_id'   => 'required',
            'qty_planning' => 'required',
        ]);

        $checkStock = ToolsResource::where("id", $request->tools_id)->first();
        $currentStock = $checkStock->qty;
        if((int)$currentStock < (int)$request->qty_planning){
            return response()->json(['status'=>'failed','message'=>'Not enough stock in warehouse!','code'=>400]);
            die();
        }


        $data = $request->all();

        $data['created_by'] = $this->currentName;

        $result = AssignTools::create($data);
        if($result){
            $checkStock = ToolsResource::find($request->tools_id);
            $newStock = (int)$checkStock->qty - (int)$request->qty_planning;
            $dataUpdate = array(
                "qty"=>$newStock,
                "updated_by"=>$this->currentName
            );
            $checkStock->update($dataUpdate);
            return response()->json(['status'=>'success','message'=>'Assign tools success!','code'=>200]);
        }else{
            return response()->json(['status'=>'failed','message'=>'Assign tools failed','code'=>400]);
        }
    }

    private function updateFromAdd($data){
        $assignTools = AssignTools::where("activity_id", $data->activity_id)->where("tools_id", $data->tools_id)->first();

        $newQty = (int)$assignTools->qty_planning + (int)$data->qty_planning;
        $dataUpdate = array(
            "qty_planning"=>$newQty,
            "updated_by"=>$this->currentName
        );

        $dataWillUpdate = AssignMaterial::where("activity_id", $data->activity_id)->where("tools_id", $data->tools_id);

        return $dataWillUpdate->update($dataUpdate);
    }

    public function update(Request $request, $id){

        if(!$id || (int) $id < 0 || $id==""){
            return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
        }
        $data = AssignTools::find($id);
        if($data){
            $result = $data->update($request->all());
        }else{
            return response()->json(['status'=>'failed','message'=>'Data Assign tools not found!','code'=>400], 400);
            die();
        }

        if($result){
            return response()->json(['status'=>'success','message'=>'Assign tools successfully updated!','code'=>200], 200);
        }else{
            return response()->json(['status'=>'failed','message'=>'Assign tools failed updated!','code'=>400], 400);
        }
    }

    public function delete($id)
    {
        $data = AssignTools::find($id);

        if($data){
            $id = $data->tools_id;
            $stock = $data->qty_planning;
            $toolsResource = ToolsResource::find($id);
            if($toolsResource){
                $oldStock  = $toolsResource->qty;
                $newStock = $oldStock + $stock;
                $dataUpdate = array(
                    "qty"=>$newStock,
                    "updated_by"=>$this->currentName
                );
                $toolsResource->update($dataUpdate);
            }

            $delete = $data->delete();
        }else{
            return response()->json(['status'=>'failed','message'=>'Data Assign tools not found!','code'=>400], 400);
            die();
        }


        if($delete){
            return response()->json(['status'=>'success','message'=>'Assign tools successfully deleted!','code'=>200], 200);
        }else{
            return response()->json(['status'=>'failed','message'=>'Assign tools failed deleted!','code'=>400], 400);
        }
    }

    public function edit($id){
        if(!$id || (int) $id < 0 || $id==""){
            return response()->json(['status'=>'failed','message'=>'id is required!','code'=>400], 400);
            die();
        }

        $result = AssignTools::find($id);

        if($result){
            return response()->json(['status'=>'success','code'=>200,'data'=>$result], 200);
        }else{
            return response()->json(['status'=>'failed','message'=>'failed get data Assign tools, please try again later!','code'=>400], 400);
        }
    }

    public function search(Request $request)
    {
        $payload = $request->all();
        $dataBuilder = $this->setUpPayload($payload, 'assign_tools_to_activity');
        $builder = $dataBuilder['builder'];
        $countBuilder = $dataBuilder['count'];
        $dataGet = $builder->get();
        $totalRecord = $countBuilder->count();
        return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
    }

    public function list()
    {
        $data = AssignTools::all();
        $countData = $data->count();

        if($data){
            return response()->json(['status'=>'success','code'=>200,'data'=>$data, 'totalRecord'=>$countData], 200);
        }else{
            return response()->json(['status'=>'failed','message'=>'failed get Assign tools, please try again later!','code'=>400], 400);
        }
    }

    public function datatables(Request $request){
        $id_activity = $request->query('idact');
        $data = AssignTools::select("assign_tools_to_activity.*","m.name as tools_name","m.uom as uom")->join("m_tools_resource as m", "m.id", "=", "assign_tools_to_activity.tools_id")->where('assign_tools_to_activity.activity_id', $id_activity)->get();
        return Datatables::of($data)
        ->addIndexColumn()
        ->addColumn('action', function($row){
            $actionBtn = '<a href="javascript:void(0)" data-id="'.$row->id.'" class="delete btn btn-danger btn-sm btn-tools-delete"><i class="fa fa-trash"></i></a>';
            return $actionBtn;
        })
        ->rawColumns(['action'])->make(true);
    }
}