<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Validator;
use App\Models\Article;
use Auth;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use App\Models\Classes;
use App\Models\TeacherClass;
use App\Models\ChildrenClass;
use App\Models\Leave;
use App\Models\CheckIn;
use App\Models\WeeklyReport;
use JiGuang\JSMS as JSMS;
use Log;
use App\Models\Teacher;
use App\Models\Children;

class TeacherController extends ApiController {
	use AuthenticatesUsers;
	private static $app_key = '097b7bfa1a75f3b8d3f910d4';
	private static $master_secret = '84624089692664d407f52654';
	/**
	 *
	 * @Description:登录
	 * @param Request $request
	 * @return number[]|string[]|string[]|unknown[]|number[]
	 */
	function login(Request $request) {
	
		$validator = Validator::make ( $request->all (), [ 
				'mobile' => 'required|max:11',
				'password' => 'required'
		] );
		if ($validator->fails ()) {
			return $this->error ( 202, '参数有误' );
		}
	
		$credentials = $this->credentials ( $request );
		if (! Auth::attempt ( $credentials )) {
			return $this->error ( 201, '用户名密码错误' );
		}

		$user = Auth::user ();
		$user->wx_openid = getOpenIdBySkey ( $request->skey );
		$user->save ();
		return $this->success ();
	}
	/**
	 *
	 * @Description:获取该教练带的班级
	 *
	 */
	function classes(Request $request) {
		$message = '点名时间为:周六上午10点至周日下午19点';
// 		$current = date ( 'w' );
// 		// 分别代表周六 周日
// 		$days = [ 
// 				6,
// 				0
// 		];
// 		if (! in_array ( $current, $days )) {
// 			return $this->error ( 407, $message );
// 		}
// 		// 如果是周六 早于10点
// 		if ($current == 6 && date ( "H" ) < 10) {
// 			return $this->error ( 407, $message );
// 		}
// 		// 如果是周日 晚于12点
// 		if ($current == 0 && date ( "H" ) > 19) {
// 			return $this->error ( 407, $message );
// 		}
		$classIds = TeacherClass::where ( 'teacher_id', $request->teacher_id )->pluck ( 'class_id' );
		$items = Classes::whereIn ( 'id', $classIds )->get ();

		return $this->success ( $items );
	}
	/**
	 *
	 * @Description:教师点名列表
	 * @param Request $request
	 */
	function callDetail(Request $request) {
		$items = [ ];
		$allChild=Children::where('classes','like',"%\"{$request->class_id}\"%")->get();
		// 获取今天请假的学生
		$leaveChildIds = Leave::where ( 'class_id', $request->class_id )->where ( 'class_date', getDateTimeNoHours () )->pluck ( 'child_id' );
		// 获取今天已签到的学生
		$checkInChildIs = CheckIn::where ( 'class_id', $request->class_id )->where ( 'check_date', getDateTimeNoHours () )->pluck ( 'child_id' );
		foreach ( $allChild as $child ) {
			$child->class_id=$request->class_id;
			if (in_array ( $child->id, $leaveChildIds->toArray () )) {
				// 已经请假的
				$child->type = 1;
			} elseif (in_array ( $child->id, $checkInChildIs->toArray () )) {
				// 已经签到的
				$child->type = 2;
			} else {
				$child->type = 0;
			}
		}
		return $this->success ( $allChild );
	}
	function username() {
		return 'mobile';
	}
	/**
	 *
	 * @Description:签到
	 * @param Request $request
	 */
	function checkIn(Request $request) {
		$data = $request->all ();
		$data ['check_date'] = getDateTimeNoHours ();
		CheckIn::create ( $data );
		return $this->success ();
	}
	/**
	 *
	 * @Description:
	 * @param Request $request
	 */
	function getReportDate(Request $request) {

		// 判断日期
		$message = '填写日报的时间为:周六上午10点至周一上午12点前';
		$current = date ( 'w' );
		$days = [ 
				6,
				0,
				1
		]; // 分别代表周六 周日 周一
		if (! in_array ( $current, $days )) {
			return $this->error ( 407, $message );
		}
		// 如果是周六 早于10点
		if ($current == 6 && date ( "H" ) < 10) {
			return $this->error ( 407, $message );
		}
		// 如果是周日 晚于12点
		if ($current == 0 && date ( "H" ) > 12) {
			return $this->error ( 407, $message );
		}
		$arr = [ ];
		// 如果是正常周六 返回当天日期
		if ($current == 6) {
			$arr [] = getDateTimeNoHours ();
		}
		// 正常周日 返回当天和昨天日期
		if ($current == 0) {
			$arr [] = getDateTimeNoHours ();
			$arr [] = date ( "Y-m-d", strtotime ( "-1 day" ) );
		}
		// 正常周一 返回昨天和前天日期
		if ($current == 1) {
			$arr [] = date ( "Y-m-d", strtotime ( "-1 day" ) );
			$arr [] = date ( "Y-m-d", strtotime ( "-2 day" ) );
		}
		return $this->success ( $arr );
	}
	/**
	 *
	 * @Description: 新增周报
	 * @param Request $request
	 */
	function addWeeklyReport(Request $request) {
		$data = $request->all ();
		$data ['teacher_id'] = $request->teacher_id;
		$data['teacher_name']=Teacher::find($request->teacher_id)->realname;
		WeeklyReport::create ( $data );
		return $this->success ();
	}

	/**
	 *
	 * @Description: 周报列表
	 * @param Request $request
	 */
	function weeklyReportList(Request $request) {
		$page = $request->input ( 'page', 1 );
		$item = WeeklyReport::where ( 'teacher_id', $request->teacher_id )->orderBy ( 'created_at', 'desc' )->paginate ( 15, [ 
				'*'
		], 'page', $page );
		return $this->success ( $item );
	}
	/**
	 *
	 * @Description:
	 * @param Request $request
	 */
	function reportDetail(Request $request) {
		$item = WeeklyReport::find ( $request->id );
		return $this->success ( $item );
	}
	/**
	 *
	 * @Description:发送请假消息给家长
	 * @param Request $request
	 */
	function sendLeaveMessage(Request $request) {
		// 确定请假学生
		$leaveChildIds = Leave::where ( 'class_id', $request->class_id )->where ( 'class_date', getDateTimeNoHours () )->pluck ( 'child_id' );
		// 获取今天已签到的学生
		$checkInChildIs = CheckIn::where ( 'class_id', $request->class_id )->where ( 'check_date', getDateTimeNoHours () )->pluck ( 'child_id' );
		// 获取本班所有未签到和请假的学生
		$children=Children::where('classes','like',"%\"{$request->class_id}\"%")->whereNotIn ( 'id', $leaveChildIds->toArray () )->whereNotIn ('id', $checkInChildIs->toArray ())->get();
		if (! count ( $children ))
			return $this->error ( 408, '没有无故缺勤学员，无需发短信' );
		foreach ( $children as $child ) {
			$client = new JSMS ( self::$app_key, self::$master_secret, [ 
					'disable_ssl' => true
			] );
			$res = $client->sendMessage ( $child->user->mobile, 159239, [ 
					'childname' => $child->realname
			] );
			if (! ($res ['http_code'] == '200' && isset ( $res ['body'] ['msg_id'] ))) {
				Log::info ( '短信发送失败' . json_encode ( $res ) );
				return $this->error ( 409, '短信发送失败' );
			}
		}
		return $this->success ();
	}

	/**
	 *
	 * @Description:
	 * @param Request $request
	 */
	function logout(Request $request) {
		$teacher = Teacher::find ( $request->teacher_id );
		$teacher->wx_openid = '';
		$teacher->save ();
		return $this->success ();
	}
	function check(Request $request) {
		return $this->success ();
	}
}
