<?php
namespace App\Http\Controllers\Api\v1;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Branch;
use App\Employee;

/**
 * BranchController Class Doc Comment
 *
 * @category Class
 * @package  Api
 * @author   Ketan Patel - ketan.patel@brainvire.com
 *
*/
class BranchController extends Controller
{

    public function __construct()
    {
     //$this->middleware('oauth', ['except' => ['index']]);
     //$this->middleware('auth:api', ['except' => ['index']]);
    }
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $branches = DB::table('branches')->orderBy('id', 'desc')->get();

        return response()->json($branches);
    }


    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function managerbranches(Request $request)
    {
        $this->validate($request, [
             'organization_id'       => 'required',
        ]);

        $branches = DB::table('branches')
                ->where('organization_id', $request->organization_id)
                ->orderBy('id', 'desc')
                ->get();

        if (count($branches) > 0) {
            return response()->json(['status' => 'success', 'data' => $branches]);
        } else {
            return response()->json(['status' => 'fail', 'message' => RECORD_NOT_FOUND, 'data' => $branches]);
        }
    }


    /**
     * Get the specified resource from storage.
     *
     * @param  int $rid
     * @return \Illuminate\Http\Response
     */
    public function show($rid)
    {
        $branch = Branch::find($rid);
        if (!empty($branch)) {
            return response()->json($branch);
        } else {
            return response()->json(['status' => 'fail']);
        }
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $this->validate($request, [
             'name'       => 'required',
            'place_value'          => 'required'
        ]);


        $record = Branch::where('name', $request->name)
                ->where('organization_id', $request->organization_id)
                ->first();
        if (!empty($record)) {
            return response()->json(['status' => 'fail', 'message' => NAME_TAKEN]);
        }

        if( $request->has('sycle_clinic_id') ) {
            $data = Branch::where('sycle_clinic_id', $request->sycle_clinic_id)->first();
            if(!empty($data)) {
                return response()->json(['status' => 'fail', 'message' => 'Sycle clinic id already associated with another location please provide unique sycle clinic id']);
            }
        }

        $branch                  = new Branch();
        $branch->name            = $request->name;
        $branch->organization_id = $request->organization_id;
        $date                    = new \DateTime();
        $ddf                     = $date->format('Y-m-d');
        $branch->place_value =  $request->place_value;

        if( $request->has('sycle_clinic_id') ) {
            $branch->sycle_clinic_id = $request->sycle_clinic_id;  
        }

        $branch->created         = $ddf;
        $branch->save();

        return response()->json(['status' => 'success']);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param \Illuminate\Http\Request $request
     * @param int                      $rid
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $rid)
    {
        $this->validate($request, [
            'name'            => 'required',
            'organization_id' => 'required',
            'place_value'          => 'required'
        ]);

        $branch           = Branch::find($rid);
        if (!$branch) {
            return response()->json(['status' => 'fail','message' => RECORD_NOT_FOUND]);
        }

        $record = Branch::where('name', $request->name)
                ->where('organization_id', $request->organization_id)
                ->where('id', '!=', $rid)
                ->first();

        if (!empty($record)) {
            return response()->json(['status' => 'fail', 'message' => NAME_TAKEN]);
        }

        if( $request->has('sycle_clinic_id') ) {
            $data = Branch::where('sycle_clinic_id', $request->sycle_clinic_id)->where('id', '!=', $rid)->first();
            if(!empty($data)) {
                return response()->json(['status' => 'fail', 'message' => 'Sycle clinic id already associated with another location please provide unique sycle clinic id']);
            }
        }


        $branch->name             = $request->name;
        $date                     = new \DateTime();
        $ddf                      = $date->format('Y-m-d H:i:s');
        $branch->updated          = $ddf;
        $branch->organization_id  = $request->organization_id;
        $branch->place_value      = $request->place_value;
        if( $request->has('sycle_clinic_id') ) {
            $branch->sycle_clinic_id = $request->sycle_clinic_id;  
        }
        $branch->save();
        
        return response()->json(['status' => 'success']);
    }

    public function savePlace(Request $request)
    {

        $this->validate($request, [
           'branchId'       => 'required',
           'place_value'          => 'required'
        ]);

        $branch           = Branch::find($request->branchId);
        
        if (!$branch) {
            return response()->json(['status' => 'fail','message' => RECORD_NOT_FOUND]);
        }
           
        $branch->place_value =  $request->place_value;
        $branch->save();
        
        /*---- Subadmin activity log ---*/
        $subAdminName           = $request->subAdminName;
        $subAdminId             = $request->subAdminId;
        $logdata                = [];
        $logdata['adminName']   = $subAdminName;
        $logdata['adminUserId'] = $subAdminId;
        $logdata['type']        = 'google_place';
        $logdata['description'] = "Sub Admin $subAdminName has added google place $request->place_value";
        $this->logActivity($logdata);
        
        return response()->json(['status' => 'success','message' => 'Place value stored successfully']);
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int $rid
     * @return \Illuminate\Http\Response
     */
    public function destroy($rid)
    {
        $employees = Employee::where('branch_id',$rid)->first();
        if($employees) {
            return response()->json(['status' => 'fail','message' => BRANCH_USED]);
        }
        if (Branch::destroy($rid)) {
             return response()->json(['status' => 'success','message'=>BRANCH_DELETED]);
        }
    }
}
