<?php

namespace App\Http\Controllers\API\v1;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use App\Http\Models\UserSite;
use App\Http\Resources\Site as SiteResource;
use App\Http\Resources\SiteCollection;
use Carbon\Carbon;
use DB;
use Validator;

class OutletController extends Controller
{

    /**
     * OutletController constructor
     * 
     * @param
     * @return void
     */

    public function __construct()
    {
        $this->limit = 50;
    }


    /**
     * index
     * GET Outlet List
     * @param Request $request
     * @return json
     */

    public function index(Request $request)
    {
        $data = UserSite::selectRaw("
            user_site.*,
            (SELECT 0) AS distance
        ")
        ->join('users', 'user_site.user_id', 'users.user_id')
        ->where('user_site.store_id', '!=', '0')
        ->where('users.user_group_id', '=', 3);

        if ($request->has('keyword') && $request->input('keyword') != '') {
            $data = $data
                ->where('site_name', 'like', '%'.$request->input('keyword').'%')
                ->orWhere('site_address', 'like', '%'.$request->input('keyword').'%');
        }

        if ($request->has('limit') && $request->input('limit') != '') {
            $this->limit = $request->input('limit');
        }

        if ($request->has('latitude') && $request->input('latitude') != '' && $request->has('longitude') && $request->input('longitude') != '') {
            $lat = $request->input('latitude');
            $long = $request->input('longitude');
            $data = $data->selectRaw("
                (6371 * acos(cos(radians($lat)) * cos(radians(site_latitude)) * cos(radians(site_longitude) - radians($long)) + sin(radians($lat)) * sin(radians(site_latitude)))) AS distance
            ")->orderBy('distance');
            
            //->whereRaw("(6371 * acos(cos(radians($lat)) * cos(radians(mc_latitude)) * cos(radians(mc_longitude) - radians($long)) + sin(radians($lat)) * sin(radians(mc_latitude)))) < 50");
        }

        $data = $data->paginate($this->limit);
        $sortedResult = $data->getCollection()->sortBy('distance')->values();
        $data->setCollection($sortedResult);
        return $this->RespondSuccess(new SiteCollection($data));
    }


    /**
     * store
     * GET Outlet Detail
     * @param Request $request, $id
     * @return json
     */

    public function show(Request $request, $id)
    {
        $data = UserSite::selectRaw("
            user_site.*
        ")
        ->where('user_id', $id);

        if ($request->has('latitude') && $request->input('latitude') != '' && $request->has('longitude') && $request->input('longitude') != '') {
            $lat = $request->input('latitude');
            $long = $request->input('longitude');
            $data = $data->selectRaw("
                (6371 * acos(cos(radians($lat)) * cos(radians(site_latitude)) * cos(radians(site_longitude) - radians($long)) + sin(radians($lat)) * sin(radians(site_latitude)))) AS distance
            ")->orderBy('distance', 'ASC');
            //->whereRaw("(6371 * acos(cos(radians($lat)) * cos(radians(mc_latitude)) * cos(radians(mc_longitude) - radians($long)) + sin(radians($lat)) * sin(radians(mc_latitude)))) < 50");
        }
        
        $data = $data->first();

        if (!$data) {
            return $this->RespondError((Object) [], 'Data Not Found');
        }

        return $this->RespondSuccess(new SiteResource($data));
    }
}
