<?php

namespace backend\modules\api\controllers;

use backend\modules\api\logic\WxTripApi;
use backend\modules\api\logic\TouristToResource;
use backend\modules\api\logic\GetTouristStock;
use backend\modules\api\logic\SubmitTouristOrder;
use backend\modules\api\models\BaseUser;
use backend\modules\api\models\OperaHotel;
use backend\modules\api\models\OperaHotelBaseRoom;
use backend\modules\api\models\OperaHotelRoom;
use backend\modules\api\models\OperaTickets;
use backend\modules\api\models\OrderMain;
use backend\modules\api\models\RunHotelDistrib;
use backend\modules\api\models\RunHotelSubRoom;
use backend\modules\api\models\RunMain;
use backend\modules\api\models\RunProd;
use backend\modules\api\models\OutsideTicket;
use backend\modules\api\models\RunStock;
use backend\modules\zzcs\models\OperaTouristCommon;
use backend\modules\zzcs\logic\TouristCalendar;
use backend\modules\zzcs\logic\TouristCombination;
use backend\modules\api\logic\GetOrderMainData;
use backend\modules\api\models\OperaMessageTemplate;
use common\models\Msg;

use backend\modules\zzcs\models\OperaTouristDetail;
use backend\modules\zzcs\models\OperaTouristRun;
use yii\web\Controller;
use Yii;

class WxController extends Controller
{
    public $enableCsrfValidation = false;

    /**
     * Function Description:入口
     * Function Name: actionIndex
     *
     * @return string
     *
     * @author Redstop
     */
    public function actionIndex()
    {

        $request = Yii::$app->request;
        $action = $request->post('action');
        $func = 'action';
        $action = explode('_', $action);
        foreach ($action as $key => $vel) {
            $func .= ucfirst($vel);
        }
        //check 验证码
        if ($this->actionCheckAuthCode() == false) {
            $json = ['code' => 1, 'info' => '验证身份失败'];
            return json_encode($json);
        }

        if ($action === false || method_exists($this, $func) == false) {
            $json = ['code' => 1, 'info' => '必要参数缺失'];
            return json_encode($json);
        }
        return $this->$func();
    }

    /**
     * Function Description:验证验证码
     * Function Name: actionCheckAuthCode
     *
     * @return string
     *
     * @author Redstop
     */
    public function actionCheckAuthCode()
    {
        $user = Yii::$app->request->post('user');//用户名
        $user_key = Yii::$app->request->post('user_key');//用户key
        $request_time = Yii::$app->request->post('request_time');//用户key
        $auth_code = Yii::$app->request->post('auth_code');//用户key
        //加密规则为 request_time(linux时间戳)前三位 + user + user_key + request_time(linux时间戳)末尾三位,进行MD5加密后,换成大写字母
        $real_auth_code = strtoupper(md5(substr($request_time, 0, 3) . "|" . $user . "|" . $user_key . "|" . substr($request_time, strlen($request_time) - 3, 3)));
        if ($real_auth_code == $auth_code) {
            return true;
        }
        return false;
    }

    /**
     * Function Description:获取所有上架跟团游产品信息
     * Function Name: actionGetTicketArray
     *
     *
     * @return string
     *
     * @author Redstop
     */
    public function actionGetTouristArray()
    {
        $opera_tourist_common = new OperaTouristCommon();

        #region 获取参数
        $user_id = Yii::$app->request->post('user_id');//用户id
        #endregion

        $tourist_array = array();

        $json = ['code' => 0, 'info' => '获取数据成功', 'data' => $tourist_array];
        return json_encode($json);
    }


    /**
     * Function Description:获取所有该电话号码相关的订单
     * Function Name: actionGetTicketArray
     *
     *
     * @return string
     *
     * @author Redstop
     */
    protected function actionGetBusOrderArray()
    {
        $get_order_main = new GetOrderMainData();

        #region 获取参数
        $user_phone = Yii::$app->request->post('phone');//联系人电话
        #endregion
        $start_date = date("Y-m-d",strtotime('-10 day'));
        $end_date = date("Y-m-d", strtotime("+20 day"));
        $search_order_main = $get_order_main->getBusOrderArrayByPhone($user_phone, $start_date, $end_date);

        $return_order_array = array();
        if ($search_order_main != false && count($search_order_main) > 0) {
            foreach ($search_order_main as $order_main_info) {
                $return_info_token = array();
                $return_info_token["cs_order_id"] = $order_main_info["parent_order_id"];
                $return_info_token["start_time"] = $order_main_info["prod_start_station_time"];
                $return_info_token["end_time"] = $order_main_info["prod_end_station_time"];
                $return_info_token["start_res_id"] = $order_main_info["prod_start_station_res_id"];
                $return_info_token["start_res"] = $order_main_info["prod_start_station_res_name"];
                $return_info_token["end_res_id"] = $order_main_info["prod_end_station_res_id"];
                $return_info_token["end_res"] = $order_main_info["prod_end_station_res_name"];
                $return_info_token["start_area_name"] = $order_main_info["prod_start_station_area_name"];
                $return_info_token["start_area_id"] = $order_main_info["prod_start_station_area_id"];
                $return_info_token["end_area_name"] = $order_main_info["prod_end_station_area_name"];
                $return_info_token["end_area_id"] = $order_main_info["prod_end_station_area_id"];
                $return_info_token["start_longitude"] = $order_main_info["start_longitude"];
                $return_info_token["start_latitude"] = $order_main_info["start_latitude"];
                $return_info_token["customer_name"] = $order_main_info["customer_name"];
                $return_info_token["customer_mobile"] = $order_main_info["customer_mobile"];
                $return_info_token["customer_id_no"] = $order_main_info["customer_id_no"];
                $return_order_array[$return_info_token["cs_order_id"]] = $return_info_token;
            }
        }
        $json = ['code' => 0, 'info' => '获取数据成功', 'list' => $return_order_array];
        return json_encode($json);
    }



    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //                                 add by Qiu Song                                                                //
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //                                 add by Wen Yili                                                                //
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /**
     * Function Description:获取自由行产品实际需要支付金额
     * Function Name: actionGetTouristPayTotal
     *
     * @return string
     *
     * @author 温依莅
     */
    protected function actionGetTouristPayTotal()
    {
        $tourist_id = Yii::$app->request->post('sign', -1);//自由行产品标识sign,格式 TR-10001,其中10001位自由行tourist_id
        $run_date = Yii::$app->request->post('date', -1);//起始日期
        $prod_arr = Yii::$app->request->post('prod_arr', -1);//票种数据(成人,儿童)格式 : [{"prod_id":"TR-10001-1","prod_name":"成人票","prod_num":"2"},{"prod_id":"TR-10001-2","prod_name":"儿童票","prod_num":"1"}
        $org_id = Yii::$app->request->post('org_id', 164);//自由行产品销售渠道id
        $user_id = Yii::$app->request->post('user_id', 2);//用户id
        if ($tourist_id == -1 || $run_date == -1 || $prod_arr == -1) {
            $result['code'] = '1';
            $result['info'] = '参数缺失';
            return json_encode($result);
        }
        $tourist_stock_obj = new GetTouristStock();
        $res = $tourist_stock_obj->getTouristPayTotal($tourist_id, $run_date, $org_id, $user_id, json_decode($prod_arr, true));
        return json_encode($res);
    }

    /**
     * Function Description:自由行产品下单
     * Function Name: actionSubmitTouristOrder
     *
     * @return string
     *
     * @author 温依莅
     */
    protected function actionSubmitTouristOrder()
    {
        $sign = Yii::$app->request->post('sign', -1);//自由行产品标识sign,格式 TR-10001,其中10001位自由行tourist_id
        $date = Yii::$app->request->post('date', -1);//起始日期
        $prod_arr = Yii::$app->request->post('prod_arr', -1);//票种数据(成人,儿童)格式 : [{"prod_id":"TR-10001-1","prod_name":"成人票","prod_num":"2"},{"prod_id":"TR-10001-2","prod_name":"儿童票","prod_num":"1"}
        $customer_info = Yii::$app->request->post('customer_info', -1);//顾客信息
        $order_info = Yii::$app->request->post('order_info', -1);//订单信息
        $passenger_info =  Yii::$app->request->post('passenger_info', '[]');//订单信息
        $buy_insurance = Yii::$app->request->post('buy_insurance', 0);//是否购买保险信  默认0  ,内部保险 1,外部保险 2
        $insurance = Yii::$app->request->post('insurance', '');//保险单详细 [{姓名,身份证},{姓名,身份证},{姓名,身份证}] array数组json_encode
        $auth_code = Yii::$app->request->post('auth_code', '');
        $user_key = Yii::$app->request->post('user_key', '');
        $user = Yii::$app->request->post('user', '');
        $userId = Yii::$app->request->post('user_id', '');
        $request_time = Yii::$app->request->post('request_time', '');

        $touristObj = new SubmitTouristOrder();
        $result = $touristObj->submitTouristGroupOrder($sign, $date, $prod_arr, $customer_info, $order_info, $passenger_info,$insurance,$buy_insurance,$auth_code,$user_key,$user,$userId,$request_time);
        return json_encode($result);
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //                                 add by Lou Mengning                                                            //
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /**
     * Function Description:微信端我要找车,获取巴士位置
     * Function Name: actionGetBusPosition
     *
     * @return mixed
     *
     * @author 娄梦宁
     */
    protected function actionGetBusPosition()
    {
        $wx_trip_api = new WxTripApi();
        $order_id = Yii::$app->request->post('order_id');//订单号
        $run_date = Yii::$app->request->post('run_date');//出行日期
        $result = $wx_trip_api->GetBusPosition($order_id, $run_date);
        return json_encode($result);
    }

    /**
     * Function Description:获取产品某一天的票种价格
     * Function Name: actionGetPriceDateByDay
     *
     * @return string
     *
     * @author 娄梦宁
     */
    protected function actionGetPriceDateByDay()
    {
        $org_id = Yii::$app->request->post('org_id','164');//渠道号 非必传  根据渠道号获取各自的价格日历
        $userId = Yii::$app->request->post('user_id', 2);
        $wx_trip_api = new WxTripApi($org_id);
        $tourist_id = Yii::$app->request->post('sign');//产品编号
        $run_date = Yii::$app->request->post('run_date');//出行日期
        $result = $wx_trip_api->GetPriceDateOne($tourist_id, $run_date,$userId);
        return json_encode($result);
    }

    /**
     * Function Description:获取一个月的价格日历
     * Function Name: actionGetPriceDateByMonth
     *
     * @return string
     *
     * @author 娄梦宁
     */
    protected function actionGetPriceDateByMonth()
    {
        $org_id = Yii::$app->request->post('org_id','164');//渠道号 非必传  根据渠道号获取各自的价格日历
        $userId = Yii::$app->request->post('user_id', 2);
        $wx_trip_api = new WxTripApi($org_id);
        $tourist_id = Yii::$app->request->post('sign');//订单号
        $result = $wx_trip_api->GetPriceDateMonth($tourist_id,$userId);
        return json_encode($result);
    }

    /**
     * Function Description:根据订单号获取座位号
     * Function Name: actionGetSeatNumber
     *
     * @return string
     *
     * @author 娄梦宁
     */
    protected  function actionGetSeatNumber(){
        $order_id=Yii::$app->request->post('order_id');
        $order_main=new OrderMain();
        $data=$order_main->getSeatNumber($order_id);
        $result=[
            'code'=>0,
            'data'=>$data
        ];
        return json_encode($result);
    }

    /**
     * Function Description:获取座位是否可换标志
     * Function Name: actionGetChangeSeatType
     *
     * @return string
     *
     * @author 娄梦宁
     */
      function actionGetChangeSeatType(){
        $order_id=Yii::$app->request->post('order_id');
        $wx_trip_api = new WxTripApi();
        $result=$wx_trip_api->getChangeSeatType($order_id);
        return json_encode($result);
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //                                 add by Luo Chenjie                                                             //
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /**
     * Function Description:获取所有巴士自由行产品数据
     * Function Name: actionGetAllTouristInfo
     *
     * @return string
     *
     * @author luocj
     */
    protected function actionGetAllTouristInfo()
    {
        $org_id = Yii::$app->request->post('org_id', 164);
        $userId = Yii::$app->request->post('user_id', 2);
        $model = new OperaTouristCommon();
        $data = $model->getAllTouristInfo();
        if ($data["code"] == 0) {
            //增加 起价
            $wx_trip_api = new WxTripApi($org_id);
            $return_list = $wx_trip_api->addMinPriceToTouristArray($data["list"], 14,$userId);
            $data["list"] = $return_list;
        }
        return json_encode($data);
    }

    /**
     * Function Description:自由行拆分成 巴士 门票 酒店
     * Function Name: actionTouristToAll
     *
     * @return string
     *
     * @author LUOCJ
     */
    protected function actionTouristToAll()
    {
        #1.获取参数
        $tp_tourist_id = Yii::$app->request->post('sign'); //自由行产品id
        $tourist_id = explode('-', $tp_tourist_id)[1];
        $date = Yii::$app->request->post('date');  //入住日期
        $prod_arr = Yii::$app->request->post('prod_arr'); //票种信息
        $customer_info = Yii::$app->request->post('customer_info'); //客人信息
        $order_info = Yii::$app->request->post('order_info'); //订单信息
        $model = new TouristToResource();
        $data = $model->getTouristToAll($tourist_id, $date, json_decode($prod_arr, true), json_decode($customer_info, true), json_decode($order_info, true),164);
        #2.返回参数

        return json_encode($data);
    }

    /**
     * Function Description:白名单接口 flag为1 添加白名单 flag 为2 删除白名单
     * Function Name: actionAppointSendMessage
     *
     * @return string
     *
     * @author LUOCJ
     */
    public function actionAppointSendMessage()
    {
        $order_id = Yii::$app->request->post('order_id', -1);
        //1为添加白名单 2为删除白名单
        $flag = Yii::$app->request->post('flag', -1);
        if ($order_id == -1 || $flag == -1 || !in_array($flag, [1, 2])) {
            $json["code"] = '1';
            $json["info"] = '缺少参数';
            return json_encode($json);
        }
        //插入表 appoint_send_message
        $model = new OperaMessageTemplate();
        if ($flag == 1) {
            $data = $model->insertAppointSendMessage($order_id);
        } else {
            $data = $model->cancelAppointSendMessage($order_id);
        }
        return json_encode($data);
    }

    /**
     * Function Description:微信点击接口 1为添加点击过接口 2为删除点击过接口
     * Function Name: actionAppointSendMessage
     *
     * @return string
     *
     * @author LUOCJ
     */
    public function actionWechatClickMessage()
    {
        $order_id = Yii::$app->request->post('order_id', -1);
        $flag = Yii::$app->request->post('flag', -1);
        if ($order_id == -1 || $flag == -1 || !in_array($flag, [1, 2])) {
            $json["code"] = '1';
            $json["info"] = '缺少参数';
            return json_encode($json);
        }
        $model = new OperaMessageTemplate();
        if ($flag == 1) {
            $data = $model->insertWechatClickMessage($order_id);
            #发送成功短信
            $msg = new OperaMessageTemplate();
            $msg->orderSendMsg($order_id, 'two');
        } else {
            $data = $model->cancelWechatClickMessage($order_id);
        }
        return json_encode($data);
    }


    /**
     * Function Description:根据sign(tourist_id)获取自由行保险价格
     * Function Name: actionGetTripDays
     * @return string
     * @author 田玲菲
     */
    public function actionGetTripDaysInsurance(){
        $tourist_id = Yii::$app->request->post('sign', 0);
        $run_date = Yii::$app->request->post('run_date', 0);
        $wx = new WxTripApi();
        $result = $wx->getFreeWalkDays($tourist_id,$run_date);
        return json_encode($result);
    }
}