<?php

namespace App\Http\Controllers\Backend;

use App\Models\District;
use App\Models\Lead;
use App\Models\Province;
use App\Models\Ward;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

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

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

	public function edit(Request $request) {
		$id = $request->input('id');
		$lead = Lead::find($id);
		return response( [
			'status' => 1,
			'data'   => view( 'admin.lead.edit', compact('lead') )->render()
		] );
	}

	public function update(Request $request) {
		$id = $request->input('id');
		$lead = Lead::find($id);
		$data = $request->all();
		$lead->update($data);
		return response( [
			'status' => 1,
			'message' => 'Success'
		] );
	}

	public function store( Request $request ) {
		$data            = $request->all();
		$data['user_id'] = auth( 'backend' )->user()->id;
		$data['last_update_status_at'] = Carbon::now()->toDateTimeString();
		Lead::create( $data );

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

	public function delete(Request $request)
	{
		$id = $request->input('id');
		$lead = Lead::find($id);
		$lead->delete();
		return response( [
			'status'  => 1,
			'message' => 'Success'
		] );
	}

	public function getLeadsByAttribute() {
		$leads = Lead::query()
			->with([
				'province',
				'district',
				'ward'
			])
			->when(!empty(\request()->input('province_id')), function($q) {
			$q->where('province_id', \request()->input('province_id'));
			})
			->when(!empty(\request()->input('district_id')), function($q) {
				$q->where('district_id', \request()->input('district_id'));
			})
			->when(!empty(\request()->input('ward_id')), function($q) {
				$q->where('ward_id', \request()->input('ward_id'));
			})
		->when(!\request()->has('order'), function($q) {
			$q->orderBy('updated_at', 'desc');
		});

		return datatables()->of( $leads )
			->editColumn('province_id', function($item) {
				return optional($item->province)->name;
			})
			->editColumn('district_id', function($item) {
				return optional($item->district)->name;
			})
			->editColumn('ward_id', function($item) {
				return optional($item->ward)->name;
			})
			->editColumn('source_link', function($item) {
				return '<a href="'.$item->source_link.'" target="_blank">'.$item->source_link.'</a>';
			})
			->editColumn('created_at', function($item) {
				return $item->created_at->format('d/m/Y');
			})
			->editColumn('status', function($item) {
				if($item->status == Lead::ACTIVE)
				{
					return '<label class="label label-success">Active</label>';
				}
				return '<label class="label label-danger">Inactive</label>';
			})
		                   ->addColumn( 'action', function ( $item ) {
			                   $action = '';
			                   $action .= '<a href="#edit-lead" data-id="'.$item->id.'" data-toggle="modal" class="btn btn-sm btn-default btn-edit"><i
                        class="fa fa-pencil"></i> Sửa</a>';

			                   $action .= '<a href="#" data-id="'.$item->id.'" class="btn btn-sm btn-default btn-delete"><i
                    class="fa fa-trash"></i> Xóa</a>';

			                   return $action;
		                   } )
			->rawColumns([
				'action',
				'status',
				'source_link'
			])
		                   ->make( true );
	}

	public function importExcel( Request $request ) {
		$file = $request->file( 'file' );
		if ( ! \File::exists( public_path( 'files' ) ) ) {
			\File::makeDirectory( public_path( 'files' ), '0777', true );
		}

		$filename = time() . '_' . mt_rand( 1111, 9999 ) . '_' . str_slug( $request->file( 'file' )->getClientOriginalName() );
		$filename = $filename . '.' . $file->extension();
		$request->file( 'file' )->move( public_path( 'files' ), $filename );

		$filePath = public_path( 'files/' . $filename );
		$items    = \Excel::selectSheetsByIndex( 0 )->load( $filePath, function ( $reader ) {
			$reader->noHeading();
		} )->skip( 1 )->get();

		foreach ( $items as $item ) {
			$provinceName = $item[4];
			$districtName = $item[5];
			$wardName     = $item[6];

			$province = Province::query()->where( 'name', $provinceName )->first();
			$district = District::query()->where( 'name', $districtName )->first();
			$ward     = Ward::query()->where( 'name', $wardName )->first();

			Lead::query()->create( [
				'name'        => $item[0],
				'phone'       => $item[1],
				'email'       => $item[2],
				'address'     => $item[3],
				'district_id' => optional( $district )->id,
				'province_id' => optional( $province )->id,
				'ward_id'     => optional( $ward )->id,
				'source'      => $item[7],
				'source_link' => $item[8],
				'price_min'   => $item[9],
				'price_max'   => $item[10],
				'note'        => $item[11],
				'user_id'     => auth( 'backend' )->user()->id,
				'last_update_status_at' => Carbon::now()->toDateTimeString()
			] );
		}

		return response( [
			'status'  => 1,
			'message' => 'Thành công'
		] );
	}
}
