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

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Device;

/**
 * DeviceController Class Doc Comment
 *
 * @category Class
 * @package  Api
 * @author   Ketan Patel - ketan.patel@brainvire.com
 *
*/
class DeviceController 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()
    {
        $helperObj = new \App\CommonHelper();
        $dateformat = env("DATE_FORMAT");
        $timeformat = env("TIME_FORMAT");
        
        $devices = DB::table('devices as dv')
            ->select(
                'u.id as userid',
                'u.name as employeename',
                'u.email',
                'br.name as branchname',
                'u.mobile',
                'dv.created as requested_at',
                'dv.status',
                'dv.id'
            )
            ->leftJoin('employees as em', 'em.user_id', '=', 'dv.employee_id')
            ->leftJoin('users as u', 'u.id', '=', 'em.user_id')
            ->leftJoin('branches as br', 'em.branch_id', '=', 'br.id')
            ->orderBy('dv.id', 'desc')
            ->get();
        if (!empty($devices)) {
            foreach($devices as $key => $val){
                $devices[$key]->requested_at = $helperObj->convertDateByFormat($val->requested_at, $dateformat.' '.$timeformat);
            }
        }
        return response()->json($devices);
    }

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

        $device                  = new Device();
        $device->device_id       = $request->device_id;
        $device->os_type         = $request->os_type;
        $device->organization_id = $request->organization_id;
        $device->employee_id     = $request->employee_id;
        $device->organization_id = $request->organization_id;

        // status values:   0=Inactive, 1=Active, 2=Pending
        $device->status          = 2;
        $date                    = new \DateTime();
        $ddf                     = $date->format('Y-m-d');
        $device->created         = $ddf;

        if ($device->save()) {
            return response()->json(['status' => 'success']);
        } else {
            return response()->json(['status' => 'fail']);
        }
    }

    /**
     * Update the specified resource in storage.
     *
     * @param \Illuminate\Http\Request $request
     * @return \Illuminate\Http\Response
     */
    public function changeStatus(Request $request)
    {
        $this->validate($request, [
            'id'          => 'required',
            'status'      => 'required',
        ]);

        $rid              = $request->id;
        $device           = Device::find($rid);
        $device->status   = $request->status;
        $date             = new \DateTime();
        $ddf              = $date->format('Y-m-d H:i:s');
        $device->updated  = $ddf;

        if ($device->save()) {
            return response()->json(['status' => 'success', 'message' => STATUS_CHANGED]);
        } else {
            return response()->json(['status' => 'fail', 'message' => SOMETHING_WENT_WRONG]);
        }
    }
}
