syntax = "proto3";

option go_package = "../protogo";

import "google/protobuf/timestamp.proto";

import "test/messagecenter/proto/mod-satellite.proto";
import "test/messagecenter/proto/mod-site.proto";


// 后端返回：任务列表
// 返回IID：IID_Server_TaskList_respond/返回IID：IID_Server_TaskForecast_respond/IID_Server_TaskExecList_respond
message RetTaskElement {
    string id = 1;//
    string no = 2;//任务编号：卫星编号（5位）+年月日（8位）+时分（4位）
    string norad = 3;//卫星编号
    RetSatelliteElement satellite = 4;//目标卫星，可能不存在(中心任务/手动任务)
    string site_no = 5;//
    RetSiteElement site = 6;//站点
    string type = 7;//来源： 自动执行、实时引导、手动执行
    TaskGrade grade = 8;//等级 0普通,1重要,2必控
    TaskStatus status = 9;//状态： 刚预报0，编排中1、已下达2、执行中3，已执行4、暂停5、 执行失败10
    google.protobuf.Timestamp gen_dt = 10;//任务生成时间
    google.protobuf.Timestamp start_dt = 11;//
    google.protobuf.Timestamp end_dt = 12;//
    double start_azi_angle = 13;//起始方位
    double end_azi_angle = 14;//结束方位角
    double start_ele_angle = 15;//初始仰角
    double max_ele_angle = 16;//最大仰角
    int32 circle = 17;//圈次
    double min_dist = 18;//最近
    double max_dist = 19;//最远
    int32 slice = 20;//预报时间间隔 ms
    map<string, string> extend = 21;//
    map<string, string> res = 22;//
    bool off = 23;//
    google.protobuf.Timestamp create_dt = 24;//
}


/**  任务信息相关的接口  **/

// 任务状态
enum TaskStatus {
    STATUS_INIT = 0; // 刚预报
    StatusUndo = 1; // 加入编排
    StatusWaiting = 2; // 等待执行
    StatusDoing = 3;  // 执行中
    StatusDone = 4; // 已执行
    StatusPause = 5;// 暂停
    StatusTerminate = 6;// 用户终止
    StatusFailed = 10; // 执行失败
}
// 任务等级
enum TaskGrade {
    GradeNone = 0;
    GradeNormal = 1; //普通
    GradeImportant = 2; //重要
    GradeUrgent = 3;  // 必控  紧急任务
}
// 前端请求：任务列表
// 请求IID：IID_Server_TaskList
// 返回IID：IID_Server_TaskList_respond
message TaskList {
    int32 token = 1; // 当前登录用户 token，暂定用户 id
    string siteNo = 2;//站点编号
    repeated TaskStatus statusArray = 3;//任务状态筛选: 1-编排列表（未下达）; 2,3,4,5-暂停，6用户终止，10-库存任务 : 已下达、已完成；
    string codeSearch = 4;//卫星编号查询  模糊查询
    string noSearch = 5;//任务编号查询  模糊查询
    TaskGrade grade = 6;//可选；紧急任务查询时必填
    google.protobuf.Timestamp start = 7;//筛选，开始时间
    google.protobuf.Timestamp end = 8;//筛选，结束时间
}


// 前端请求：轨道预报
// 请求IID：IID_Server_TaskForecast
// 返回IID：IID_Server_TaskForecast_respond
message TaskForecast {
    int32 token = 1; // 当前登录用户 token，暂定用户 id
    repeated SiteSatelliteList forecastList = 2;
    double slice = 3;//预报间隔:slice (1.00)
    double minEleAngle = 4;//最低仰角:minEleAngle (5)
    google.protobuf.Timestamp start = 5;//开始时间
    google.protobuf.Timestamp end = 6;//结束时间
    TaskGrade grade = 7;//如果是3，则为紧急任务，紧急任务的状态为1
}
message SiteSatelliteList {
    string siteNo = 1;// 三级站
    string tles = 2;//tles字符串，允许多个。和卫星id二选一
    repeated string noradArray = 3;//卫星编号数组json
}

message RetForecastOneOver {
    string norad = 1;
}
// 前端请求：加入编排
// 请求IID：IID_Server_TaskPlan
// 返回IID：IID_Server_TaskPlan_respond
message TaskPlan {
    int32 token = 1; // 当前登录用户 token，暂定用户 id
    string siteNo = 2;// 三级站
    repeated RetTaskElement taskList = 3;//id数组json形式
}
enum ConflictType {
    ConflictType_Default = 0;
    ConflictType_Dt = 1;
    ConflictType_Ele = 2;
    ConflictType_Priority = 3;
}
// 前端请求：按冲突规则处理任务
// 请求IID：IID_Server_TaskConflict
// 返回IID：IID_Server_TaskConflict_respond
message TaskHandleConflict {
    int32 token = 1; // 当前登录用户 token，暂定用户 id
    string siteNo = 2;// 三级站
    ConflictType conflict = 3;// 任务冲突策略选择
    int64 leastTime = 4;// 任务时间下限  s
    int64 switchTime = 5;// 任务切换时间 s
    repeated RetTaskElement taskList = 6;// 任务编号
}

// 前端请求 下达任务
// 请求IID：IID_Server_TaskIssued
// 返回IID：IID_Server_TaskIssued_respond
message TaskIssued {
    int32 token = 1; // 当前登录用户 token，暂定用户 id
    string siteNo = 2;// 三级站
    int32 switchTime = 3;// 任务切换时间
    repeated RetTaskElement taskList = 4;// 任务列表
}

// 前端请求：任务批量暂停和恢复
// 请求IID：IID_Server_TaskPause
// 返回IID：IID_Server_TaskPause_respond
message TaskPause {
    int32 token = 1; // 当前登录用户 token，暂定用户 id
    string siteNo = 2;// 二级站
    repeated string idArray = 3;//id数组json形式
}

// 前端请求：任务重新执行，在任务时间范围内、执行失败或进行中的状态时
// 请求IID：IID_Server_TaskRecovery
// 返回IID：IID_Server_TaskRecovery_respond
message TaskRecovery {
    int32 token = 1; // 当前登录用户 token，暂定用户 id
    string siteNo = 2;// 二级站
    repeated string idArray = 3;//id数组json形式
}

// 前端请求：任务删除
// 请求IID：IID_Server_TaskDel
// 返回IID：IID_Server_TaskDel_respond
message TaskDel {
    int32 token = 1; // 当前登录用户 token，暂定用户 id
    string siteNo = 2;// 二级站
    repeated string idArray = 3;//id数组json形式
}
enum Operation {
    OperationDefault = 0;
    OperationIssued = 1;
    OperationPause = 2;
    OperationRecovery = 3;
    OperationDel = 4;
    OperationHandMode = 5;
    OperationHandSendWorkParams = 6;
}
message TaskConfirm {
    Operation operate = 1;
    string taskId = 2;
    bool handMode = 3;
}
message RetTaskConfirm {
    Operation operate = 1;
    string taskId = 2;
}


// 前端请求 任务首页,当前执行的任务，准备中任务，完成任务等
// 请求IID：IID_Server_TaskIndex
// 返回IID：IID_Server_TaskIndex_respond
//message TaskIndex{
//  int32 token = 1; // 当前登录用户 token，暂定用户 id
//}
// 后端返回 任务首页
//  返回IID：IID_Server_TaskIndex_respond
message RetTaskIndex {
    map<string, string> data = 1;
    repeated RetTaskElement taskList = 2;
    //当前站址、纬度、经度、海拔、航向？
    //卫星名称、卫星编号
    //天控器开始方位、最大仰角
    //任务优先级
    //UTC时间、北京时间
    //任务准备数、任务剩余数
}

// 前端请求 任务预报参数配置
// 请求IID：IID_Server_TaskForecastParamSet
// 返回IID：IID_Server_TaskForecastParamSet_respond
message TaskForecastParamSet {
    int32 token = 1; // 当前登录用户 token，暂定用户 id
    string siteNo = 2;// 三级站
    double slice = 3;// ms
    double maxDist = 4;// km 最大距离
    double minDist = 5;// km 最小距离
    double maxAziAngle = 6;// 最大方位角
    double minAziAngle = 7;// 最小方位角
    double maxEleAngle = 8;// 最大仰角
    double minEleAngle = 9;// 最小仰角
    int32 pointStep = 10;// 星下点采集间隔
    int32 pointDuration = 11;//s 星下点计算间隔
    string datPath = 12;// data文件保存路径
}


// 前端请求 任务自动编排,执行时间为当天0点
// 请求IID：IID_Server_TaskAutoSet
// 返回IID：IID_Server_TaskAutoSet_respond
message TaskAutoSet {
    int32 token = 1; // 当前登录用户 token，暂定用户 id
    string siteNo = 2;// 三级站
    string autoStartHMS = 3;// 开始具体的时分秒 00:00:00 格式
    string autoEndHMS = 4;// 结束具体的时分秒 00:00:00 格式
    int32 autoFrequency = 5; // 隔几天
    bool taskAutoStrategyStatus = 6;// 任务自动编排执行策略是否启用
    ConflictType conflict = 7;// 任务冲突策略选择
    bool conflictStrategyStatus = 8;// 任务冲突策略是否启动
    int64 leastTime = 9;// s  任务时间下限
    int64 switchTime = 10;// s 任务切换时间
    int64 collectionTime = 11; // s 天线收藏时间
}


enum TaskStep {
    TaskStep_Default = 0;
    TaskStep_Forecast = 1;
    TaskStep_Plan = 2;
    TaskStep_Issued = 3;
}

// 前端请求：任务俯仰方位数据
// 请求IID：IID_Server_TaskDetailDat
// 返回IID：IID_Server_TaskDetailDat_respond
message TaskDetailDat {
    int32 token = 1; // 当前登录用户 token，暂定用户 id
    string id = 2;//任务id
    string siteNo = 3;
    TaskStep taskStep = 4;
}

// 后端返回：任务俯仰方位数据
// 返回IID：IID_Server_TaskDetailDat_respond
message RetTaskDat {
    google.protobuf.Timestamp dt = 1; //
    double range = 2;//距离
    double ele = 3;//俯仰角
    double azi = 4; // 方位角
}

// 前端请求：任务星下点数据
// 请求IID：IID_Server_TaskDetailPoint
// 返回IID：IID_Server_TaskDetailPoint_respond
message TaskDetailPoint {
    int32 token = 1; // 当前登录用户 token，暂定用户 id
    string siteNo = 2;
    string id = 3;//任务id
}
// 后端返回：任务星下点数据
// 返回IID：IID_Server_TaskDetailPoint_respond
message RetTaskPoint {
    google.protobuf.Timestamp dt = 1;  //
    string lat = 5; // 经度
    string lon = 6; // 纬度
    string height = 7; // 高度
}

// 前端请求：手动/自动模式切换
// 请求IID：IID_Server_TaskHandMode
// 返回IID：IID_Server_TaskHandMode_respond
message TaskHandMode {
    int32 token = 1; // 当前登录用户 token，暂定用户 id
    string siteNo = 2;// 站点编号
    bool flag = 3;// 模式 true-手动，false-自动
}

// 前端请求：删除卫星/宏参数前确认任务是否存在
// 请求IID：IID_Server_TaskExist
// 返回IID：IID_Server_TaskExist_respond
message TaskExist {
    int32 token = 1; // 当前登录用户 token，暂定用户 id
    string siteNo = 2;// 站点编号,二级站
    bool flag = 3;// false-删除卫星确认，true-删除宏参数确认
    repeated TaskExistParams params = 4;
}
message TaskExistParams {
    string norad = 1;
    int32 configId = 2;// 宏参数配置号
}
message RetTaskExist {
    bool flag = 2;// 是否有任务
}
// 前端请求：手动下发宏参数
// 请求IID：IID_Server_TaskHandSendWorkParams
// 返回IID：IID_Server_TaskHandSendWorkParams_respond
message TaskHandSendWorkParams {
    int32 token = 1; // 当前登录用户 token，暂定用户 id
    string siteNo = 2;// 站点编号,二级站
    string taskId = 3;// 需要下发的宏参数的任务
}

// 前端请求：太阳、月亮轨道预报
// 请求IID：IID_Server_TaskForecastPlanet
// 返回IID：IID_Server_TaskForecastPlanet_respond
message TaskForecastPlanet {
    int32 token = 1; // 当前登录用户 token，暂定用户 id
    string siteNo = 2;//
    enum PlanetNo {
        default = 0;
        Sun = 1;
        Moon = 2;
    }
    PlanetNo planet = 3;//
    double slice = 4;//预报间隔:slice (1.00)
    double minEleAngle = 5;//最低仰角:minEleAngle (5)
    google.protobuf.Timestamp start = 6;//开始时间
    google.protobuf.Timestamp end = 7;//结束时间
}


//    IID_Server_TaskMonitorList=10437;
//    IID_Server_TaskMonitorList_respond=10438;
message TaskMonitorList {
    int32 token = 1;
    string siteNo = 2;
    repeated string noradArray = 3;
}
//    IID_Server_TaskMonitorHandMode=10439;
//    IID_Server_TaskMonitorHandMode_respond=10440;
message TaskMonitorHandMode {
    int32 token = 1;
    string siteNo = 2;
    bool Mode = 3;// true-手动，false-自动
}
//    IID_Server_TaskMonitorHandControl=10441;
//    IID_Server_TaskMonitorHandControl_respond=10442;
message TaskMonitorHandControl {
    int32 token = 1;
    string siteNo = 2;
    string taskNo = 3;
    string dataSettingNo = 4;
}