<?php

namespace App\Http\Controllers\Backend;

use App\Models\Hostel;
use App\Models\ReportSale;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class SearchHostelController extends AdminController {
	//
	public function index() {
		return view( 'admin.search_hostel.index' );
	}

	public function updateConfig( Request $request ) {
		$data = $request->all();
		foreach ( $data as $key => $value ) {
			option()->set( $key, $value );
		}

		return redirect()->back()->with( 'success', 'Thành công' );
	}

	public function reportSale() {
		return view( 'admin.report_sale.index' );
	}

	public function getReportSaleByAttribute( Request $request ) {

		$types = $request->input( 'types' );
		$items = ReportSale::query()->with( [
			'user',
			'owner',
			'types',
			'hostel'
		] )
		                   ->when( ! empty( $types ), function ( $q ) use ( $types ) {
			                   $q->whereHas( 'types', function ( $q ) use ( $types ) {
				                   $q->whereIn( 'type', $types );
			                   } );
		                   } );

		return \DataTables::of( $items )
		                  ->filterColumn( 'user_name', function ( $q, $keyword ) {
							$q->whereHas('user', function($q) use ($keyword) {
								$q->where('name', 'LIKE', '%'.$keyword.'%');
							});
		                  } )
			->filterColumn( 'user_phone', function ( $q, $keyword ) {
				$q->whereHas('user', function($q) use ($keyword) {
					$q->where('phone', 'LIKE', '%'.$keyword.'%');
				});
			} )
			->filterColumn( 'owner_name', function ( $q, $keyword ) {
				$q->whereHas('owner', function($q) use ($keyword) {
					$q->where('name', 'LIKE', '%'.$keyword.'%');
				});
			} )
			->filterColumn( 'hostel_id', function ( $q, $keyword ) {
				$q->whereHas('hostel', function($q) use ($keyword) {
					$q->where('name', 'LIKE', '%'.$keyword.'%');
				});
			} )
		                  ->addColumn( 'user_name', function ( $item ) {
			                  return optional( $item->user )->name_text;
		                  } )
		                  ->addColumn( 'user_phone', function ( $item ) {
			                  return optional( $item->user )->phone;
		                  } )
		                  ->addColumn( 'owner_name', function ( $item ) {
			                  return optional( $item->owner )->name_text;
		                  } )
		                  ->addColumn( 'types', function ( $item ) {
			                  $typesArr = optional( $item->types )
				                  ->pluck( 'type' )
				                  ->toArray();
			                  $types    = ReportSale::TYPES;
			                  $retVal   = [];

			                  foreach ( $typesArr as $type ) {
				                  if ( isset( $types[ $type ] ) ) {
					                  $retVal[] = $types[ $type ];
				                  }
			                  }

			                  return implode( ', ', $retVal );

		                  } )
		                  ->addColumn( 'owner_phone', function ( $item ) {
			                  return optional( $item->owner )->phone;
		                  } )
		                  ->addColumn( 'hostel_id', function ( $item ) {
			                  if ( $item->hostel ) {
				                  return '<a href="' . url( 'nha-tro/' . str_slug( $item->hostel->name ) . '-' . $item->hostel->id ) . '" target="_blank">' . $item->hostel->name . '</a>';
			                  }
		                  } )
		                  ->editColumn( 'created_at', function ( $item ) {
			                  return $item->created_at->format( 'd/m/Y H:i' );
		                  } )
		                  ->editColumn( 'status', function ( $item ) {
			                  return '<div style="min-width: 100px"> <a data-source="' . url( 'admin/report-sale/status' ) . '" href="javascript:;" data-type="select" data-pk="' . $item->id . '" data-placement="left" data-emptytext="Chưa xác định"
                                       data-name="status" data-value="' . $item->status . '"
                                       data-original-title="Nhập giá trị" id="status-' . $item->id . '"
                                       data-placeholder="Vui lòng chọn"
                                       class="editable editable-status editable-click editable-empty">' . $item->status_text . '</a></div>';
		                  } )
		                  ->editColumn( 'note', function ( $item ) {
			                  return '<div style="min-width: 100px"> <a href="javascript:;" data-type="text" data-pk="' . $item->id . '" data-placement="left" data-emptytext="......"
                                       data-name="note" data-value="' . $item->note . '"
                                       data-original-title="Nhập giá trị" id="status-' . $item->id . '"
                                       data-placeholder="Vui lòng chọn"
                                       class="editable editable-status editable-click editable-empty">' . $item->note . '</a></div>';
		                  } )
		                  ->addColumn( 'action', function ( $item ) {
			                  $retVal = '<a data-id="' . $item->id . '" class="btn btn-sm btn-outline btn-editable btn-delete dark black"><i class="fa fa-trash"></i> Xóa</a>';

			                  return $retVal;
		                  } )
		                  ->make( true );
	}

	public function deleteReportSale( Request $request ) {
		$id         = $request->input( 'id' );
		$reportSale = ReportSale::find( $id );
		if ( $reportSale ) {
			$reportSale->delete();
		}

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

	public function updateReportSaleAttribute( Request $request ) {
		$id     = $request->input( 'pk' );
		$value  = $request->input( 'value' );
		$hostel = ReportSale::find( $id );
		$name   = $request->input( 'name' );

		$hostel->$name = $value;
		$hostel->save();

		return 1;
	}

	public function reportSaleStatus( Request $request ) {
		return response( [
			[
				'value' => ReportSale::NOT_PROCESS,
				'text'  => 'Chờ xử lý'
			],
			[
				'value' => ReportSale::PROCESSING,
				'text'  => 'Đang xử lý'
			],
			[
				'value' => ReportSale::RIGHT,
				'text'  => 'Thông tin đúng'
			],
			[
				'value' => ReportSale::WRONG,
				'text'  => 'Thông tin sai'
			],
		] );
	}
}
