<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\AddPincodeRequest;
use App\Pincode;
use App\User;
use App\Zone;
use App\StateModel;
use Carbon\Carbon;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;

class ZoneController extends Controller
{

    public function getZones(){

        $totalcount = Zone::count();
        $zones = Zone::paginate(20);
        return view('admin/zones/index',['zones'=>$zones,'totalcount'=>$totalcount]);

    }

    public function getAddZone(Request $request){

        return view('admin/zones/add');
    }

    public function postAddZone(Request $request)
    {
        $zonename = $request['zonename'];
        $status = $request['status'];
        $pinstring = implode(',',$request['pincodes']);
        $pinarray = explode(',',$pinstring);


        $qry = "";
        for($i=0;$i<count($pinarray);$i++){
            if($i != count($pinarray)){
                $qry .= "FIND_IN_SET($pinarray[$i],pincodes) or " ;
            }
        }
        $trimmed = rtrim($qry,' or');

        $zoneid = \DB::table("zones")->whereRaw($trimmed)->get();
//        $zoneid = \DB::table("zones")->whereRaw("FIND_IN_SET('777777',pincodes) or FIND_IN_SET('',pincodes)")->get();
        if(!$zoneid->isEmpty()){
            return 'Exists';
        }
        else{

            $zone = new Zone();
            $zone->created_at = Carbon::now()->toDateTimeString();
            //$zone->created_by = Auth::user()->id;
            $zone->name = $zonename;
            $zone->pincodes = $pinstring;
            $zone->status = $status;
            if($zone->save()){
                return'Success';
            }
            else{
                return 'Error';
            }

        }
    }


    public function getEditZone($id)
    {
//        $zone = Zone::where('id', $id)->first();
//        $pinarray = $zone['pincodes'];
//        $explode = explode(',',$pinarray);
//
//        foreach($explode as $pincode){
//            $list = Pincode::where('pincode', $pincode)->first(['state','taluk','districtname']);
//            $data['state'] = isset($list['state']) ? $list['state'] : $list['state'];
//            $taluk = isset($list['taluk']) ? $list['taluk'] : '';
//            $district = isset($list['districtname']) ? $list['districtname'] : '';
//            $data['city'] = $taluk.', '.$district;
//        }

        $data['zone'] = Zone::where('id', $id)->first();

        return view('admin/zones/add', $data);
    }


    public function postEditZone(Request $request){

        $zonename = $request['zonename'];
        $status = $request['status'];
        $id = $request['id'];
        $pinstring = implode(',',$request['pincodes']);
        $pinarray = explode(',',$pinstring);


        $qry = "";
        for($i=0;$i<count($pinarray);$i++){
            if($i != count($pinarray)){
                $qry .= "FIND_IN_SET($pinarray[$i],pincodes) or " ;
            }
        }
        $trimmed = rtrim($qry,' or');

        $zoneid = \DB::table("zones")->whereRaw("(".$trimmed.") and id !=".$id)->get();

//        return $zoneid;
        if(!$zoneid->isEmpty()){
            return 'Exists';
        }
        else{
            $zone = Zone::find($id);
            $zone->updated_at = Carbon::now()->toDateTimeString();
            //$lender->created_by = Auth::user()->id;
            $zone->name = $zonename;
            $zone->pincodes = $pinstring;
            $zone->status = $status;

            $zone->save();
            if($zone->save()){

                if ($status == 0){
                    $zoneData = User::whereRaw("FIND_IN_SET($id,zones)")->get(['id','zones']);
                    foreach ($zoneData as $data){
                        if (isset($data->zones) && !empty($data->zones)){
                            $zoneIds = explode(',',$data->zones);
                            if ($zoneIds && ($key = array_search($id, $zoneIds)) !== false) {
                                unset($zoneIds[$key]);
                            }
                            User::where('id', $data->id)->update(['zones' => implode(',', $zoneIds)]);
                        }
                    }
                }

                return'Success';
            }
            else{
                return 'Error';
            }
        }

    }

}