<?php

namespace App\Http\Controllers\Backend;

use App\Models\District;
use App\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class AgentController extends Controller {
	//
	public function index() {
		return view( 'admin.agent.index' );
	}

	public function create() {
		return response( [
			'status' => 1,
			'data'   => view( 'admin.agent.create' )->render()
		] );
	}

	public function edit( Request $request ) {
		$agentId = $request->input( 'id' );
		$agent   = User::find( $agentId );

		return response( [
			'status' => 1,
			'data'   => view( 'admin.agent.edit', compact( 'agent' ) )->render()
		] );
	}

	public function destroy( Request $request ) {
		$agentId = $request->input( 'id' );
		$agent   = User::find( $agentId );

		if ( $agent ) {
			$agent->is_agent = false;
			$agent->save();
		}

		return response( [
			'status' => 1
		] );
	}

	public function getAgentsByAttribute( Request $request ) {
		$items = User::query()
		             ->with( 'agentDistricts' )
		             ->where( 'is_agent', true )
		             ->orderBy( 'updated_at', 'desc' );

		return datatables()
			->of( $items )
			->addColumn( 'districts', function ( $item ) {
				return $item->agentDistricts->pluck( 'name' )->toArray();
			} )
			->addColumn( 'action', function ( $item ) {
				return
					'<a href="#edit-agent" data-toggle="modal" class="btn btn-sm green btn-outline btn-edit" data-id="' . $item->id . '"> Sửa</a>' .
					'<a href="#" class="btn btn-sm red btn-outline btn-delete" data-id="' . $item->id . '"> Xóa</a><br><br>';
			} )
			->make( true );
	}

	public function storeAgent( Request $request ) {
		$userIds     = $request->input( 'users' );
		$provinceId  = $request->input( 'province_id' );
		$districtIds = $request->input( 'district_id' );
		if ( empty( $provinceId ) ) {
			return response( [
				'status'  => 0,
				'message' => 'Không được bỏ trống Tỉnh / Thành phố'
			] );
		}
		if ( ! empty( $userIds ) ) {
			$users = User::query()->whereIn( 'id', $userIds )->get();

			if ( empty( $districtIds ) ) {
				$districtIds = District::query()
				                       ->where( 'provinceid', $provinceId )
				                       ->get()
				                       ->pluck( 'districtid' )
				                       ->toArray();
			}

			foreach ( $users as $user ) {
				$user->agentDistricts()
				     ->sync( $districtIds );
			}

			User::query()->whereIn( 'id', $userIds )
			    ->update( [
				    'is_agent'          => true,
				    'province_agent_id' => $provinceId
			    ] );
		}

		return response( [
			'status' => 1
		] );
	}

	public function update( Request $request ) {
		$id          = $request->input( 'id' );
		$agent       = User::find( $id );
		$provinceId  = $request->input( 'province_id' );
		$districtIds = $request->input( 'district_id' );
		if ( empty( $provinceId ) ) {
			return response( [
				'status'  => 0,
				'message' => 'Không được bỏ trống Tỉnh / Thành phố'
			] );
		}
		if ( empty( $districtIds ) ) {
			$districtIds = District::query()
			                       ->where( 'provinceid', $provinceId )
			                       ->get()
			                       ->pluck( 'districtid' )
			                       ->toArray();
		}

		$agent->agentDistricts()->sync( $districtIds );
		$agent->province_agent_id = $provinceId;
		$agent->save();


		return response( [
			'status' => 1
		] );
	}
}
