<?php
namespace Api\Controller;
use Think\Controller;
class FlowController extends BaseController {

    private $pages ;

    //保存
    public function save(){
        $login_user = $this->checkLogin();
        $id = I("id/d");
        $flow_name = I("flow_name");
        $item_id = I("item_id/d");
        $env_id = I("env_id/d");
        $times = isset($_REQUEST['times']) ? I("times/d") : 1 ;
        $time_interval = isset($_REQUEST['time_interval']) ? I("time_interval/d") : 0 ;
        $error_continue =isset($_REQUEST['error_continue']) ? I("error_continue/d") : 1;
        $save_change = isset($_REQUEST['save_change']) ? I("save_change/d") : 1 ;
 
        $date_time = date("Y-m-d H:i:s");
        if($id){
            $res = D("RunapiFlow")->where(" id = '{$id}' ")->find();
            if(!$this->checkItemPermn($login_user['uid'] , $res['item_id'])){
                $this->sendError(10303);
                return ;
            }
            $data = array() ;
            $data['last_update_time'] = $date_time ;
            if($flow_name){
                $data['flow_name'] = $flow_name ;
            }
            if(isset($_REQUEST['env_id'])){
                $data['env_id'] = $env_id ;
            }
            if(isset($_REQUEST['times'])){
                $data['times'] = $times ;
            }        
            if(isset($_REQUEST['time_interval'])){
                $data['time_interval'] = $time_interval ;
            }
            if(isset($_REQUEST['error_continue'])){
                $data['error_continue'] = $error_continue ;
            }
            if(isset($_REQUEST['save_change'])){
                $data['save_change'] = $save_change ;
            }        
            D("RunapiFlow")->where(" id = '{$id}' ")->save($data);

        }else{
            if(!$this->checkItemPermn($login_user['uid'] , $item_id)){
                $this->sendError(10303);
                return ;
            }
            $data = array() ;
            $data['username'] = $login_user['username'] ;
            $data['uid'] = $login_user['uid'] ;
            $data['flow_name'] = $flow_name ;
            $data['env_id'] = $env_id ;
            $data['item_id'] = $item_id ;
            $data['times'] = $times ;
            $data['time_interval'] = $time_interval ;
            $data['error_continue'] = $error_continue ;
            $data['save_change'] = $save_change ;
            $data['addtime'] = $date_time ;
            $data['last_update_time'] = $date_time ;
            // 如果环境小于等于0，尝试获取项目的第一个环境变量赋值
            if($env_id <= 0){
                $res = D("RunapiEnv")->where(" item_id = '{$item_id}' ")->find() ;
                if($res && $res['id']){
                    $data['env_id'] =  $res['id'] ;
                }
            }
            $id = D("RunapiFlow")->add($data);

        }
        usleep(300000);
        $res = D("RunapiFlow")->where(" id = '{$id}' ")->find();
        $this->sendResult($res);
        
    }

    //获取列表
    public function getList(){
        $login_user = $this->checkLogin();
        $item_id = I("item_id/d");
        if(!$this->checkItemPermn($login_user['uid'] , $item_id)){
            $this->sendError(10303);
            return ;
        }
        
        $ret = D("RunapiFlow")->where(" item_id = '{$item_id}' ")->order(" id desc  ")->select();
        if ($ret) {
           $this->sendResult($ret);
        }else{
            $this->sendResult(array());
        }
    }

    //删除
    public function delete(){
        $id = I("id/d")? I("id/d") : 0;
        $login_user = $this->checkLogin();
        $res = D("RunapiFlow")->where(" id = '{$id}' ")->find();
        if(!$this->checkItemPermn($login_user['uid'] , $res['item_id'])){
            $this->sendError(10303);
            return ;
        }
        
        $ret = D("RunapiFlow")->where(" id = '$id'")->delete();
        
        if ($ret) {
           $this->sendResult($ret);
        }else{
            $return['error_code'] = 10103 ;
            $return['error_message'] = 'request  fail' ;
            $this->sendResult($return);
        }
    }

    // 新增接口到flow中
    public function addFlowPage(){
        $login_user = $this->checkLogin();
        $flow_id = I("flow_id/d");
        $page_id = I("page_id/d");
        $flow_res = D("RunapiFlow")->where(" id = '{$flow_id}' ")->find();
        if(!$this->checkItemPermn($login_user['uid'] , $flow_res['item_id'])){
            $this->sendError(10303);
            return ;
        }
        $page_res = $page = M("Page")->where(" page_id = '$page_id' ")->find();
        if(!$this->checkItemPermn($login_user['uid'] , $page_res['item_id'])){
            $this->sendError(10303);
            return ;
        }

        // 获取该flow的最后一个页面的顺序号
        $s_number1 = D("RunapiFlowPage")->where("flow_id = '{$flow_id}'")->order("s_number desc")->getField("s_number");
        $s_number = $s_number1 + 1 ;
        $id = D("RunapiFlowPage")->add(array(
            "flow_id" => $flow_id ,
            "page_id" => $page_id ,
            "s_number" => $s_number ,
            "addtime" => date("Y-m-d H:i:s") ,
        ));
        if($id){
            $this->sendResult($id);
        }else{
            $this->sendError(10101);
        }

    }

    // 从flow中删除接口
    public function deleteFlowPage(){
        $login_user = $this->checkLogin();
        $id = I("id/d");
        $flow_page_res = D("RunapiFlowPage")->where(" id = '{$id}' ")->find();
        $page_id = $flow_page_res['page_id'] ;
        $page_res = $page = M("Page")->where(" page_id = '$page_id' ")->find();
        if(!$this->checkItemPermn($login_user['uid'] , $page_res['item_id'])){
            $this->sendError(10303);
            return ;
        }
        $res = D("RunapiFlowPage")->where(" id = '{$id}' ")->delete();
        if($res){
            $this->sendResult($res);
        }else{
            $this->sendError(10101);
        }

    }
    // 获取某个流程里的接口列表
    public function getFlowPageList(){
        $login_user = $this->checkLogin();
        $flow_id = I("flow_id/d");
        $flow_res = D("RunapiFlow")->where(" id = '{$flow_id}' ")->find();
        if(!$this->checkItemPermn($login_user['uid'] , $flow_res['item_id'])){
            $this->sendError(10303);
            return ;
        }
        $res = D("RunapiFlowPage")->where(array(
            "flow_id" => $flow_id ,
        ))->order("s_number asc ")->select();
        if($res){
            foreach ($res as $key => $value) {
                $res[$key]['page_title'] = $this->_get_page_title($flow_res['item_id'],$value['page_id']);
            }
            $this->sendResult($res);
        }else{
            $this->sendResult(array());
        } 

    }

    private function _get_page_title($item_id,$page_id){
        if(!$this->pages){
            $ret = D("Page")->where(" item_id = '%d' " , array($item_id))->select();
            if($ret){
                $this->pages = $ret ;
            }else{
                return false ;
            }
        }

        foreach ( $this->pages as $key => $value) {
            if($value['page_id'] == $page_id){
                return $value['page_title'] ;
            }
        }
        return false ;
    }


    // 保存顺序关系
    public function saveSort(){
        $login_user = $this->checkLogin();
        $flow_id = I("flow_id/d");
        $orders = I("orders");
        $res = D("RunapiFlow")->where(" id = '{$flow_id}' ")->find();
        if(!$this->checkItemPermn($login_user['uid'] , $res['item_id'])){
            $this->sendError(10303);
            return ;
        }
        $data_array = json_decode(htmlspecialchars_decode($orders) , true) ;
        if($data_array){
            foreach ($data_array as $key => $value) {
                if($value['id']){
                    D("RunapiFlowPage")->where(" flow_id = '%d' and id = '%d' ",array($flow_id , $value['id']))->save(array(
                        "s_number"=>$value['s_number']
                    ));
                }
            }
        }
        $this->sendResult(array());

    }




}