<?php
namespace app\api\controller;

use app\common\enum\notice\NoticeEnum;
use app\common\logic\RemoteRequestLogic;
use app\common\model\action\Action;
use app\common\model\animal_info\AnimalInfo;
use app\common\model\device\Device;
use app\common\model\device\MonitorThreshold;
use app\common\model\farm\Farm;
use app\common\model\fence_house\FenceHouse;
use app\common\model\file\File;
use app\common\model\land\Land;
use app\common\model\land\LandProduct;
use app\common\model\land\Product;
use app\common\model\LandCollection;
use app\common\model\monitor\MonitorData;
use app\common\model\plant\Plant;
use app\common\model\product\ProductDevice;
use app\common\model\suyuan_operation\AnimalOperateAction;
use think\facade\Log;
use think\response\Json;


/**
 * index
 * Class IndexController
 * @package app\api\controller
 */
class IndexController extends BaseApiController
{
	
    public array $notNeedLogin = ['code','suYuan'];
	
	//首页
    public function index(): Json
    {
		$params = $this->request->get();
	    //获取栏舍信息

        $data = FenceHouse::where('id',$params['fence_house_id'])->order('id desc')->findOrEmpty()->toArray();

		if(empty($data)){
			return $this->success('请求成功',[]);
		}
        $product = Product::where('fence_house_id', $data['id'])->findOrEmpty()->toArray();
        if(empty($product)){
            return $this->fail('栏舍暂未绑定设备',[]);
        }
        $deviceIds = ProductDevice::where('product_id', $product['id'])->column('device_id');
        $device =  Device::whereIn('id', $deviceIds)->where('type', 2)->findOrEmpty();
        $data['video_url'] = $device['video_url'];
        $data['device_id'] = $device['id'];
        // 监控视频封面
        $file = File::where('cid', $device['id'])->order('id', 'desc')->findOrEmpty();
        $data['video_cover'] = isset($file['uri'])? env('project.project_url').'/'.$file['uri']: '';

        //
        $data['monitor']['datas'] = RemoteRequestLogic::getMonitorData($deviceIds);

        $monitorThreshold = MonitorThreshold::where('fence_house_id', $params['fence_house_id'])->find();

        $data['monitor']['threshold'] = $monitorThreshold;


	    return $this->success('请求成功',$data);
    }
	
	//视频监控
	public function video(): Json
	{
		$params = $this->request->get(['land_id']);
		if(empty($params['land_id'])){
			return $this->fail('参数错误');
		}
		//获取土地绑定的产品
		$landProduct = LandProduct::where('land_id',$params['land_id'])->findOrEmpty();
		if($landProduct->isEmpty()){
			return $this->fail('当前土地未绑定设备产品');
		}
		//获取监控设备
		$productDevice = ProductDevice::where('product_id',$landProduct['product_id'])->where('device_type',3)->column('device_id');
		if(empty($productDevice)){
			return $this->fail('当前土地未绑定监控设备');
		}
		//获取设备编号
		$device = Device::where('id','in',$productDevice)->select();
		return $this->success('请求成功',$device->toArray());
	}
	
	// 获取短信验证码
	public function code(): Json
	{
		//验证请求方式
		if(!$this->request->isPost()){
			return $this->fail('请求方式错误');
		}
		//获取参数
		$params = $this->request->post(['phone','scene']);
		if(empty($params['phone']) || empty($params['scene'])){
			return $this->fail('缺少必要参数');
		}
		if(!in_array($params['scene'],[NoticeEnum::LOGIN_CAPTCHA,NoticeEnum::BIND_MOBILE_CAPTCHA,NoticeEnum::CHANGE_MOBILE_CAPTCHA,NoticeEnum::FIND_LOGIN_PASSWORD_CAPTCHA])){
			return $this->fail('短信场景错误');
		}
		//发送短信
		try {
			$result = event('Notice',  [
				'scene_id' => $params['scene'],
				'params' => [
					'mobile' => $params['phone'],
					'code' => mt_rand(100000, 999999),
				]
			]);
			return $this->success($result[0]);
		}catch(\Exception $e){
			//记录日志
			Log::error($e->getMessage());
			return $this->fail($e->getMessage());
		}
	}
	
	public function suYuan(): Json
	{
		$params = $this->request->get(['animal_sn']);
        $pageNo =  $this->request->get('page_no', 1);
        $pageSize =  $this->request->get('page_size', 5);
		if(empty($params['animal_sn'])){
			return $this->fail('参数错误');
		}
		$animalInfo = AnimalInfo::where('sn',$params['animal_sn'])->findOrEmpty();
		if($animalInfo->isEmpty()){
			return $this->fail('档案信息错误');
		}

		//获取suyaun
		$action = AnimalOperateAction::field('type,type_text,detail,create_time')->where('fence_house_id',$animalInfo['fence_house_id'])->whereOr('animal_info_id', $animalInfo['id'])
        ->page($pageNo, $pageSize)
        ->select()->each(function($item){
			$item['detail'] = json_decode($item['detail'],true);
			return $item;
		})->toArray();
        $data = [
            'lists' => $action,
            'count' => AnimalOperateAction::where('fence_house_id',$animalInfo['fence_house_id'])->whereOr('animal_info_id', $animalInfo['id'])->count(),
            'page_no' => $pageNo,
            'page_size' => $pageSize,
        ];
		return $this->success('请求成功', $data);
	}
}