<?php

namespace app\home\service;

use app\model\StockMarketModel;

class StockService extends BaseHomeService
{

    // 校验股票市场状态
    public function checkMarketStatus($param): array
    {
        try {

            if(empty($param['type']) || !is_numeric($param['type'])){
                return $this->toData('0', 'SUCCESS', ['status' => '2']);
            }

            // 1 开启 2 关闭
            $market = StockMarketModel::where('stock_market_type', $param['type'])->find();
            if(empty($market)){
                return $this->toData('0', 'SUCCESS', ['status' => '2']);
            }

            if($market->status == StockMarketModel::STATUS_OFF){
                return $this->toData('0', 'SUCCESS', ['status' => '2', 'market' => $market->toArray()]);
            }

            // 如果是开启 则判断是否在开盘时间段
            $date = date('H:i');
            $dateTime = \DateTime::createFromFormat('H:i', $date);
            $amOpenTime = \DateTime::createFromFormat('H:i', $market->am_open_time);
            $pmOpenTime = \DateTime::createFromFormat('H:i', $market->pm_open_time);
            $amCloseTime = \DateTime::createFromFormat('H:i', $market->am_close_time);
            $pmCloseTime = \DateTime::createFromFormat('H:i', $market->pm_close_time);

            // 判断 上午盘
            if($amOpenTime > $amCloseTime){
                // 开盘时间 大于 闭盘时间 跨天
                if($dateTime >= $amOpenTime || $dateTime <= $amCloseTime){
                    return $this->toData('0', 'SUCCESS', ['status' => '1','market' => $market->toArray(),$dateTime,$amOpenTime,$amCloseTime,1]);
                }
            } else {
                if($dateTime >= $amOpenTime && $dateTime <= $amCloseTime){
                    return $this->toData('0', 'SUCCESS', ['status' => '1','market' => $market->toArray(),$dateTime,$amOpenTime,$amCloseTime,2]);
                }
            }

            // 下午盘
            if($pmOpenTime > $pmCloseTime){
                // 开盘时间 大于 闭盘时间 跨天
                if($dateTime >= $pmOpenTime || $dateTime <= $pmCloseTime){
                    return $this->toData('0', 'SUCCESS', ['status' => '1','market' => $market->toArray(),$dateTime,$pmOpenTime,$pmCloseTime,3]);
                }
            } else {
                if($dateTime >= $pmOpenTime && $dateTime <= $pmCloseTime){
                    return $this->toData('0', 'SUCCESS', ['status' => '1','market' => $market->toArray(),$dateTime,$pmOpenTime,$pmCloseTime,4]);
                }
            }

            return $this->toData('0', 'SUCCESS', ['status' => '2','market' => $market->toArray()]);
        }catch (\Exception $exception){
            return $this->toData('400','System error',[$exception->getMessage()]);
        }

    }
}