<?php

namespace App\Http\Controllers\Backend;

use App\Components\Functions;
use App\Models\UserPackage;
use App\User;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Yajra\DataTables\DataTables;

class UserController extends AdminController {
	//
	public function getStaffByAttributeView() {
		return view( 'admin.user.staffs', compact( 'remainStaff' ) );
	}

	public function getRefer() {
		return view( 'admin.user.refer' );
	}

	public function getReferByAttribute() {
		$items = User::query()
		             ->with( [
			             'refer'
		             ] )
		             ->whereRaw( 'id <> refer_id' )
			->when(!empty(\request()->input('month')), function($q) {
				$date = Carbon::createFromFormat('d/m/Y', '01/'.\request()->input('month'));
				$q->whereBetween('refer_date', [
					$date->copy()->startOfMonth()->startOfDay(),
					$date->copy()->endOfMonth()->endOfDay()
				]);
			})
		             ->whereNotNull( 'refer_id' );

		return Datatables::of( $items )
		                 ->addIndexColumn()
		                 ->editColumn( 'refer_name', function ( $item ) {
			                 return $item->refer->name;
		                 } )
		                 ->editColumn( 'refer_phone', function ( $item ) {
			                 return $item->refer->phone;
		                 } )
		                 ->editColumn( 'refer_status', function ( $item ) {
			                 return $item->refer_status_text;
		                 } )
		                 ->editColumn( 'refer_reason', function ( $item ) {
			                 return $item->refer_reason_text;
		                 } )
		                 ->editColumn( 'refer_date', function ( $item ) {
			                 return optional( $item->refer_date )->format( 'd/m/Y H:i' );
		                 } )
		                 ->make( true );
	}

	public function getStaffByAttribute() {
		$items = User::query()
		             ->where( 'type', User::ADMIN )
		             ->where( function ( $q ) {
			             $q->orWhere( 'email', '<>', 'admin@itro.vn' );
			             $q->orWhereNull( 'email' );
		             } );

		return Datatables::of( $items )
		                 ->addIndexColumn()
		                 ->editColumn( 'name', function ( $item ) {
			                 return $item->name_text;
		                 } )
		                 ->editColumn( 'image', function ( $item ) {
			                 return '<img src="' . $item->image . '" class="img-circle" style="width: 150px; height: 150px" />';
		                 } )
		                 ->addColumn( 'action', function ( $item ) {
			                 return '<div style="min-width: 350px">' .
			                        '<a data-id="' . $item->id . '" data-toggle="modal" href="#edit-staff" class="btn btn-sm btn-outline btn-editable btn-edit-staff dark black">
								<i class="fa fa-edit"></i> Sửa</a>' .
			                        '<a data-id="' . $item->id . '" data-toggle="modal" href="#edit-staff-permission" class="btn btn-sm btn-outline btn-editable btn-edit-permission dark black">
								<i class="fa fa-user"></i> Phân quyền</a>' .
			                        '<a data-id="' . $item->id . '" class="btn btn-sm btn-outline btn-editable btn-delete-staff dark black">
								<i class="fa fa-trash"></i> Xóa</a></div>';
		                 } )->make( true );
	}

	public function deleteStaff( Request $request ) {
		$id = $request->input( 'id' );

		$user = User::find( $id );

		if ( $user ) {
			$user->delete();
		}

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

	}

	public function editStaffPermission( $id, Request $request ) {
		$user = User::find( $id );

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

	public function updateStaffPermission( Request $request ) {


		$id          = $request->input( 'id' );
		$permissions = $request->input( 'permissions' );
		$user        = User::find( $id );
		$user->syncPermissions( $permissions );

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

	}

	public function updateStaff( Request $request ) {
		$data     = $request->all();
		$password = $request->input( 'password' );
		$user     = User::find( $data['user_id'] );
		if ( ! empty( $password ) ) {
			$data['password'] = \Hash::make( $password );
		}
		$user->update( $data );
		if ( $request->ajax() ) {

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

		return redirect()->to( url( 'admin/login' ) )->with( 'success', 'Đăng ký thành công' );
	}

	public function editStaff( $id, Request $request ) {
		$user = User::find( $id );

		if ( ! $user ) {
			return response( [
				'status'  => 0,
				'message' => 'Dữ liệu không hợp lệ'
			] );
		}

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