using IMCS.DefaultList;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IMCS.Device
{
    public class DeviceAGV
    {
        /*单例模式*/
        public DeviceAGV()
        {
        }
        /// 
        /// 当前任务编号
        /// 
        public string reqCode { get; set; }
        /*生成任务单*/
        /// 
        /// 生成任务订单
        /// 
        /// 任务类型
        /// 起点坐标
        /// 起点类型
        /// 终点坐标
        /// 终点类型
        public AGVRequestDefaultList AGV_SendTask(string taskType, string startPosition, string startType, string endPosition, string endType)
        {
            IMCS.DefaultList.AGVRequestDefaultList aGVRequestDefaultList = new DefaultList.AGVRequestDefaultList();
            aGVRequestDefaultList.reqCode = Guid.NewGuid().ToString().Substring(0, 30);
            reqCode = aGVRequestDefaultList.reqCode;
            aGVRequestDefaultList.taskTyp = taskType;// "F01";
            aGVRequestDefaultList.positionCodePath = new List() { new DefaultList.AGVPositionCodePathList() {
               // positionCode="p001", type="02"
               positionCode=startPosition, type=startType
            },
            new DefaultList.AGVPositionCodePathList(){ positionCode=endPosition, type=endType }
            };
            //aGVRequestDefaultList.tokenCode = "";
            //aGVRequestDefaultList.ctnrTyp = "";
            //aGVRequestDefaultList.ctnrCode = "";
            //aGVRequestDefaultList.wbCode = "";
            //aGVRequestDefaultList.positionCodePath = new List() { new DefaultList.AGVPositionCodePathList() { positionCode="p001", type="02" } };
            //aGVRequestDefaultList.podCode = "";
            //aGVRequestDefaultList.podDir = "";
            //aGVRequestDefaultList.podTyp = "-1";
            //aGVRequestDefaultList.materialLot = "";
            //aGVRequestDefaultList.priority = "1";
            //aGVRequestDefaultList.agvCode = "";
            //aGVRequestDefaultList.taskCode = "";
            //aGVRequestDefaultList.data = "";
            return aGVRequestDefaultList;
        }
        /* 继续执行任务*/
        /// 
        /// 继续执行任务
        /// 
        /// 继续执行的任务id
        public AGVRequestDefaultList AGV_ContinuTask(string reqCode)
        {
            IMCS.DefaultList.AGVRequestDefaultList aGVRequestDefaultList = new DefaultList.AGVRequestDefaultList();
            aGVRequestDefaultList.reqCode = reqCode;
            return aGVRequestDefaultList;
        }
        /*取消任务*/
        /// 
        /// 取消任务
        /// 
        /// 需要取消的任务ID
        public AGVRequestDefaultList AGV_CancelTask(string reqCode)
        {
            IMCS.DefaultList.AGVRequestDefaultList aGVRequestDefaultList = new DefaultList.AGVRequestDefaultList();
            aGVRequestDefaultList.reqCode = reqCode;
            return aGVRequestDefaultList;
        }
        /*任务执行通知*/
        /// 
        /// 任务执行通知
        /// 
        /// 当前任务编号
        /// 当前位置编号
        ///任务开始:该位置为任务起点
        ///走出储位:该位置为任务起点
        ///任务单取消:该位置为工作位编号
        ///任务结束:该位置为任务终点
        /// 方法名, 可使用任务类型做为方法
        ///名由 RCS-2000 任务模板配置后并告知上层系统
        ///默认使用方式:
        ///RCS-2000 接口协议 对外发布
        ///start : 任务开始
        ///outbin : 走出储位
        ///end : 任务结束
        ///cancel : 任务单取消
        /// AGV 编号(同 agvCode 
        /// 
        public AGVRequestDefaultList AGV_agvCallback(string taskcode, string currentPositionCode, string method, string robotCode)
        {
            IMCS.DefaultList.AGVRequestDefaultList aGVRequestDefaultList = new DefaultList.AGVRequestDefaultList();
            aGVRequestDefaultList.reqCode = Guid.NewGuid().GuidLeng();
            aGVRequestDefaultList.reqTime = DateTime.Now.DateTimeToString();
            aGVRequestDefaultList.currentPositionCode = currentPositionCode;
            aGVRequestDefaultList.method = method;
            aGVRequestDefaultList.robotCode = robotCode;
            aGVRequestDefaultList.taskCode = taskcode;
            return aGVRequestDefaultList;
        }
        /*任务优先级设置*/
        /// 
        /// 任务优先级设置
        /// 
        /// 当前需要设置优先级的任务id
        /// 当前任务优先级1-127 值越大,等级越高
        /// 
        public AGVRequestDefaultList AGV_setTaskPriority(string taskCode, string priority)
        {
            IMCS.DefaultList.AGVRequestDefaultList aGVRequestDefaultList = new DefaultList.AGVRequestDefaultList();
            aGVRequestDefaultList.reqCode = Guid.NewGuid().GuidLeng();
            aGVRequestDefaultList.priority = new List() { new AGVPrioritiesList() { taskCode = taskCode, priority = priority } };
            return aGVRequestDefaultList;
        }
        /// 
        /// 任务优先级设置
        /// 
        /// 当前所需调整优先级的列表
        /// 
        public AGVRequestDefaultList AGV_setTaskPriority(List priorities)
        {
            IMCS.DefaultList.AGVRequestDefaultList aGVRequestDefaultList = new DefaultList.AGVRequestDefaultList();
            aGVRequestDefaultList.reqCode = Guid.NewGuid().GuidLeng();
            aGVRequestDefaultList.priority = priorities;
            return aGVRequestDefaultList;
        }
        /*货架与位置绑定,解绑*/
        /// 
        /// 货架与位置绑定,解绑
        /// 
        /// 任务编号
        /// 货架编号
        /// 位置编号,地图位置的别名,能任
        ///意命名(字母+数字),但要唯一,由
        ///RCS-2000 界面配置。
        /// 绑定或解绑
        /// 
        public AGVRequestDefaultList AGV_bindPodAndBerth(string reqCode, string podCode, string positionCode, bool agv_Enable)
        {
            IMCS.DefaultList.AGVRequestDefaultList aGVRequestDefaultList = new DefaultList.AGVRequestDefaultList();
            aGVRequestDefaultList.reqCode = reqCode;
            aGVRequestDefaultList.podCode = podCode;
            aGVRequestDefaultList.positionCode = positionCode;
            aGVRequestDefaultList.indBind = agv_Enable.BoolToInt().ToString();
            return aGVRequestDefaultList;
        }
        /// 
        /// 货架与物料绑定、解绑
        /// 
        /// 任务编号
        /// 货架编号
        /// 物料批次
        /// 绑定或解绑
        /// 
        public AGVRequestDefaultList AGV_bindPodAndMat(string reqCode, string podCode, string materialLot, bool agv_Enable)
        {
            IMCS.DefaultList.AGVRequestDefaultList aGVRequestDefaultList = new DefaultList.AGVRequestDefaultList();
            aGVRequestDefaultList.reqCode = reqCode;
            aGVRequestDefaultList.podCode = podCode;
            aGVRequestDefaultList.materialLot = materialLot;
            aGVRequestDefaultList.indBind = agv_Enable.BoolToInt().ToString();
            return aGVRequestDefaultList;
        }
        /*位置禁用与启用*/
        /// 
        /// 
        /// 
        /// 需要取消的任务ID
        /// 位置编号,地图位置别名,
        /// 是否启用
        /// 
        public AGVRequestDefaultList AGV_lockPosition(string reqCode, string positionCode, bool agv_Enable)
        {
            IMCS.DefaultList.AGVRequestDefaultList aGVRequestDefaultList = new DefaultList.AGVRequestDefaultList();
            aGVRequestDefaultList.reqCode = reqCode;
            aGVRequestDefaultList.positionCode = positionCode;
            aGVRequestDefaultList.indBind = agv_Enable.BoolToInt().ToString();
            return aGVRequestDefaultList;
        }
        /*地图位置信息同步*/
        /*查询货架存储位与物料批次关系*/
        /// 
        /// 查询货架存储位与物料批次关系
        /// 
        /// 
        public AGVRequestDefaultList AGV_queryPodBerthAndMat()
        {
            IMCS.DefaultList.AGVRequestDefaultList aGVRequestDefaultList = new DefaultList.AGVRequestDefaultList();
            aGVRequestDefaultList.reqCode = Guid.NewGuid().GuidLeng();
            return aGVRequestDefaultList;
        }
        /*容器与仓位绑定,解绑*/
        /// 
        /// 
        /// 
        /// 容器类型
        /// 是否启用,绑定为ture,解绑为false
        /// 
        public AGVRequestDefaultList AGV_bindCtnrAndBin(string ctnrCode, bool agv_Enable)
        {
            IMCS.DefaultList.AGVRequestDefaultList aGVRequestDefaultList = new DefaultList.AGVRequestDefaultList();
            aGVRequestDefaultList.reqCode = Guid.NewGuid().GuidLeng();
            aGVRequestDefaultList.indBind = agv_Enable.BoolToInt().ToString();
            return aGVRequestDefaultList;
        }
        /*查询任务状态*/
        /// 
        /// 查询任务状态
        /// 
        /// 需要查询的任务id
        /// 
        public AGVRequestDefaultList AGV_queryTaskStatus(string reqCode)
        {
            IMCS.DefaultList.AGVRequestDefaultList aGVRequestDefaultList = new DefaultList.AGVRequestDefaultList();
            aGVRequestDefaultList.reqCode = reqCode;
            return aGVRequestDefaultList;
        }
        /*查询AGV状态*/
        /// 
        /// 查询AGV状态
        /// 
        /// 
        public AGVRequestDefaultList AGV_queryAgvStatus()
        {
            IMCS.DefaultList.AGVRequestDefaultList aGVRequestDefaultList = new DefaultList.AGVRequestDefaultList();
            aGVRequestDefaultList.reqCode = Guid.NewGuid().GuidLeng();
            return aGVRequestDefaultList;
        }
        /*停止AGV*/
        public AGVRequestDefaultList AGV_stopRobot()
        {
            IMCS.DefaultList.AGVRequestDefaultList aGVRequestDefaultList = new DefaultList.AGVRequestDefaultList();
            aGVRequestDefaultList.reqCode = Guid.NewGuid().GuidLeng();
            return aGVRequestDefaultList;
        }
        /*恢复AGV*/
        public AGVRequestDefaultList AGV_resumeRobot()
        {
            IMCS.DefaultList.AGVRequestDefaultList aGVRequestDefaultList = new DefaultList.AGVRequestDefaultList();
            aGVRequestDefaultList.reqCode = Guid.NewGuid().GuidLeng();
            return aGVRequestDefaultList;
        }
        /*告警推送通知*/
        /*绑定解绑通知*/
        /**/
    }
}