<?php

/**
 * Created by PhpStorm.
 * User: Steven
 * Date: 2017/3/13
 * Time: 18:42
 * 接口调用方：合作方
 * 接口返回方：携程
 */

require_once dirname(__DIR__) . '/Common/Utils.php';

class  Api_HotelPush extends PhalApi_Api
{
    public $obj_utils = '';
    public $Currency = 'RMB';

    public function __construct()
    {
        $this->obj_utils = new roomOrderUtils();
    }

    public function getRules()
    {
        return array(/* '*' => array(  //通用接口参数
                'code' => array('name' => 'code', 'require' => true, 'min' => 4, 'max' => 4),
            ),
            'index' => array(  //指定接口参数
                'username' => array('name' => 'username', 'default' => 'PHPer',),
            ),*/
        );
    }

    /**
     * 默认接口服务
     * @return string title 标题
     * @return string content 内容
     * @return string version 版本，格式：X.X.X
     * @return int time 当前时间戳
     */
    public function index()
    {
        return array(
            'title' => 'Hello Worl!',
            'content' => T('Hi {name}, welcome to use PhalApi!', array('name' => $this->username)),
            'version' => PHALAPI_VERSION,
            'time' => $_SERVER['REQUEST_TIME'],
        );
    }

    /**
     * User:Steven
     *
     * Desc:GetCtripRoomTypeInfo（获得房型对照）
     * 1-1. 接口调用方：合作方
     * 1-2. 接口返回方：携程
     * 1-3. 调用频率：不限制，建议每天早晚各一次
     * 1-4. 使用说明：合作方通过自己的酒店信息、房型信息、房价套系等获得携程的房型对 照信息
     */
    public function GetCtripRoomTypeInfo()
    {
        $RoomTypeList = array(
            'HotelGroupHotelCode' => "",
            'HotelGroupRoomTypeCode' => "",
            'HotelGroupBrand' => "",
            'HotelGroupRatePlanCode' => ''
        );
        $RoomTypeInfo['HotelGroupInterfaceRoomTypeListRequest'] = $RoomTypeList;
        $res = $this->obj_utils->xml_encode($RoomTypeInfo, 'GetCtripRoomTypeInfo');
        $result = $this->obj_utils->soapRequest('GetCtripRoomTypeInfo', $res);  //发送soap请求
        //TODO:得到请求结果，处理
        return $result;
    }

    /**
     * User:Steven
     *
     * Desc:SetRoomPrice（设置房型价格）
     * 1.接口调用方：合作方
     * 2.接口返回方：携程
     * 3.调用频率：不限制，建议不大于50万次/分钟（QPS<1万）
     * 4.使用说明：携程建议当价格变化时，立即进行推送。携程方面是异步处理价格。
     */
    public function SetRoomPrice()
    {
        $Prices['Price'] = array(
            'AmountBeforeTaxFee' => '',   //税前
            'AmountAfterTaxFee' => '',    //税后
            'CostAmountBeforeTaxFee' => '',//税前成本
            'CostAmountAfterTaxFee' => '',    //税后成本
            'Day' => ''           //连住天数，暂不用，默认为1
        );
        //PriceInfo节点代表一天的价格，每天的价格可以不 同
        $PriceInfos['PriceInfo'][] = array(
            'Prices' => $Prices,
            'Stays' => '',  //连住，暂不用，默认为1
            'BlanceType' => '', //支付类型
            'PriceType' => '',  //价格类型
            'Breakfast' => '',  //早餐
            'Applicability' => ''   //适用人群
        );
        //根据日期范围生成多天的 SetRoomPriceItem
        $SetRoomPriceItem['SetRoomPriceItem'][] = array(
            'PriceInfos' => $PriceInfos,
            'RoomID' => '',
            'StartDate' => '',
            'EndDate' => '',
            'Currency' => $this->Currency,
        );
        $RoomTypeList = array(
            'SetRoomPriceItems' => $SetRoomPriceItem,
            'HotelID' => "",        //酒店ID
            'Submitor' => "",       //提交人，集团名拼音
            'Title' => '',
            'Priority' => ''    //是否优先处理，暂不用，默认为N
        );

        $RoomPriceRequest['SetAdaperRoomPriceRequest'] = $RoomTypeList; //设置多房型多天房价
        $res = $this->obj_utils->xml_encode($RoomPriceRequest, 'SetRoomPrice');
        $result = $this->obj_utils->soapRequest('SetRoomPrice', $res);  //发送soap请求
        return $result;
    }

    /**
     * User:Steven
     *
     * Desc:SetRoomInfo（设置房态）
     * 1.接口调用方：合作方
     * 2.接口返回方：携程
     * 3.调用频率：不限制，建议不大于50万次/分钟（QPS<1万）
     * 4.使用说明：携程建议当房态变化时（开或关），立即进行推送。携程方面是异步处 理房态。
     */
    public function SetRoomInfo()
    {
        //设置房态信息请求，设置一个房型单天或多天房态，不支持多房型同时 设置
        $RoomInfoItem['RoomInfoItem'][] = array(
            'Stays' => '',    //连住，暂不用，默认为1
            'ChangeDefault' => '',    //是否同时修改房态默认值(F-否，T-是)
            'Recommend' => '',       //国内推荐级别(5-特推,4-主推,3-可推,2-可订,1-不推,0-不可 订)
            'Recommend_Intl' => '', //国外推荐级别(5-特推,4-主推,3-可推,2-可订,1-不推,0-不可 订)
            'HoldDeadline' => '',   //保留时间(9999-无规定,1000-10:00,...,2330-23:30)
            'Roomstatus' => '', //房态(N-满房,G-良好)
            'RoomsInv' => '',     //临时保留房总数
            'UserLimited' => '',      //预订限制(2-超时担保,3-一律担保,9999-无限制)
            'Note' => '',         //备注
            'ReserveTime' => '',  //保留房用最晚预订时间，计算公式：订单入住日24点向后推 算，如果设置为6，则当天保留房最晚预订时间为24点向后倒推6小时，为18点。 如果设置为36，则保留房最晚预订时间为24点向后倒推36小时，表示入住日前一 天的中午12点。
            'Restorable' => '',   //保留房可否恢复(T-可，F-不可)
            'Guarantee' => '',        //担保（此字段暂时不维护）
            'CheckType' => '',        //住店控制(C-进店统计,S-住店统计)
            'GuaranteeLCT' => '',     //担保最晚取消时间，计算公式同ReserveTime，不可取消设置 为23988
            'PrepayLCT' => '',        //预付最晚取消时间，计算公式同ReserveTime, 不可取消设置 为23988
            'AllNeedGuarantee' => '',     //全额/峰时担保(F-否,T-全额担保,B-峰时担保)-
            'RoomGiftID' => '',       //房型礼品ID，默认值-2147483648
            'LateReserveTime' => '',  //订单最晚预订时间，计算公式同ReserveTime
            'DeductType' => '',       //预付房型扣款类型(C-全部扣款,F-首日扣款)
        );

        $RoomInfoRequest['SetRoomInfoRequest'] = array(
            'RoomInfoItems' => $RoomInfoItem,
            'RoomID' => '',       //房型ID
            'StartDate' => '',    //开始日期
            'EndDate' => '',  //结束日期，设置多天表示多天房态
            'Editer' => '',       //修改者,集团名拼音
        );
        $res = $this->obj_utils->xml_encode($RoomInfoRequest, 'SetRoomInfo');
        $result = $this->obj_utils->soapRequest('SetRoomInfo', $res);  //发送soap请求
        return $result;
    }

    /**
     * User:Steven
     *
     * Desc:UpdateRoomQuantity（更新保留房数量）
     * 1-1.接口调用方：合作方
     * 1-2.接口返回方：携程
     * 1-3.调用频率：限制， 建议10次/分钟，并会视情况调整
     * 1-4.使用说明：携程建议当房量变化时，立即进行推送。携程方面是异步处理房量更新操作。
     *              一个请求最多只允许更新 10 个酒店下的房型，一个请求只允许 120 天内的房量， 一个请求 只允许发送少于 100 个房型。
     */
    public function UpdateRoomQuantity()
    {
        //多个房型
        $RoomQuantityEntityList['RoomQuantityEntity'][] = array(
            'RoomTypeID' => '',
            'RoomQuantityCount' => '',
            'RoomQuantityUpdateType' => '',
            'StartDate' => '',
            'EndDate' => ''
        );
        //一个酒店
        $UpdateRoomQuantityRequest['UpdateRoomQuantityRequest'] = array(
            'SequenceID' => '',
            'HotelID' => '',
            'RoomQuantityEntityList' => $RoomQuantityEntityList,
            'Editer' => '',
        );
        $res = $this->obj_utils->xml_encode($UpdateRoomQuantityRequest, 'UpdateRoomQuantityRequest ');
        $result = $this->obj_utils->soapRequest('UpdateRoomQuantityRequest ', $res);  //发送soap请求
        return $result;
    }
}