syntax = "proto3";

import "cmvr/api/common.proto";  // 导入通用命令头定义，确保与其他服务接口一致

package cmvr.api;

/**
 * 面部表情控制参数定义
 * 包含生物头部机器人面部各部位的运动参数，用于精确控制面部表情
 */
message FacialExpression {
  /**
   * 眉毛控制参数
   * 左右眉毛的内外侧垂直位置（0.0-1.0标准化值）
   */
  message Eyebrow {
    float left_outside_y = 1;  // 左眉外侧垂直位置
    float left_inside_y = 2;   // 左眉内侧垂直位置
    float right_outside_y = 3; // 右眉外侧垂直位置
    float right_inside_y = 4;  // 右眉内侧垂直位置
  }
  Eyebrow eyebrow = 3;        // 眉毛参数封装

  /**
   * 眼睑控制参数
   * 左右眼睑的上下位置（0.0-1.0标准化值）
   */
  message Eyelid {
    float left_upper_y = 1;    // 左上眼睑垂直位置
    float left_lower_y = 2;    // 左下眼睑垂直位置
    float right_upper_y = 3;   // 右上眼睑垂直位置
    float right_lower_y = 4;   // 右下眼睑垂直位置
  }
  Eyelid eyelid = 4;          // 眼睑参数封装

  /**
   * 眼球控制参数
   * 左右眼球的二维坐标（-1.0到1.0标准化值，中心为0）
   */
  message Eyeball {
    float left_x = 1;          // 左眼球水平位置
    float left_y = 2;          // 左眼球垂直位置
    float right_x = 3;         // 右眼球水平位置
    float right_y = 4;         // 右眼球垂直位置
  }
  Eyeball eyeball = 5;        // 眼球参数封装

  /**
   * 鼻子控制参数
   * 鼻子左右侧的垂直位置（0.0-1.0标准化值）
   */
  message Nose {
    float left_y = 1;          // 鼻子左侧垂直位置
    float right_y = 2;         // 鼻子右侧垂直位置
  }
  Nose nose = 6;              // 鼻子参数封装

  /**
   * 嘴巴控制参数
   * 包含嘴唇整体位置和左右唇角细节
   */
  message Mouth {
    float upper_lip_y = 1;     // 上唇垂直位置
    float upper_lip_z = 2;     // 上唇前后位置（Z轴）
    float lower_lip_y = 3;     // 下唇垂直位置
    float lower_lip_z = 4;     // 下唇前后位置（Z轴）

    /**
     * 左唇角控制参数
     * 包含上唇、唇角、下唇的坐标点
     */
    message LeftLip {
      float upper_x = 1;       // 左上唇水平位置
      float upper_y = 2;       // 左上唇垂直位置
      float corner_x = 3;      // 左唇角水平位置
      float corner_y = 4;      // 左唇角垂直位置
      float lower_x = 5;       // 左下唇水平位置
      float lower_y = 6;       // 左下唇垂直位置
    }
    LeftLip left_lip = 5;      // 左唇角参数封装

    /**
     * 右唇角控制参数
     * 结构与左唇角对称
     */
    message RightLip {
      float upper_x = 1;       // 右上唇水平位置
      float upper_y = 2;       // 右上唇垂直位置
      float corner_x = 3;      // 右唇角水平位置
      float corner_y = 4;      // 右唇角垂直位置
      float lower_x = 5;       // 右下唇水平位置
      float lower_y = 6;       // 右下唇垂直位置
    }
    RightLip right_lip = 6;    // 右唇角参数封装
  }
  Mouth mouth = 7;            // 嘴巴参数封装

  /**
   * 下巴控制参数
   * 下巴的二维移动坐标（X/Y轴）
   */
  message Jaw {
    float x = 1;               // 下巴水平位置
    float y = 2;               // 下巴垂直位置
  }
  Jaw jaw = 8;                // 下巴参数封装
}

/**
 * 设置面部表情命令（集成通用命令头）
 * 用于单次设置生物头部的面部表情
 */
message SetFacialExpression {
  message Request {
    CommandHeader.Request header = 1;  // 通用命令头，包含设备ID和时间戳
    FacialExpression expression = 2;   // 具体面部表情参数
  }

  message Feedback {
    CommandHeader.Feedback header = 1; // 通用反馈头，包含操作状态和时间戳
    string execution_id = 2;           // 表情执行任务ID
    float execution_time_ms = 3;        // 表情执行耗时（毫秒）
  }
}

/**
 * 流式面部表情命令（集成通用命令头）
 * 用于连续发送多个面部表情，实现表情动画效果
 */
message StreamFacialExpression {
  message Request {
    CommandHeader.Request header = 1;   // 通用命令头
    FacialExpression expr =  2;         // 执行
    bool eof = 3;                       // 标记是否为流结束
  }

  message Feedback {
    CommandHeader.Feedback header = 1;  // 通用反馈头
    FacialExpression expr_diff = 2;     // 执行误差
  }
}

/**
 * 获取生物头部状态命令（集成通用命令头）
 * 用于查询当前头部各部位的状态和位置
 */
message GetStatus {
  message Request {
    CommandHeader.Request header = 1;  // 通用命令头
  }

  message Feedback {
    CommandHeader.Feedback header = 1; // 通用反馈头
    bool is_moving = 2;                // 是否有部位在移动
    string last_request_id = 3;        // 上一次请求的ID
    repeated float current_positions = 4; // 当前各部位位置参数
    bool camera_recording = 5;         // 相机是否在录制
    string active_recording_id = 6;    // 活跃录制任务的ID
  }
}

/**
 * 紧急停止命令（集成通用命令头）
 * 用于立即停止所有面部动作
 */
message EmergencyStop {
  message Request {
    CommandHeader.Request header = 1;  // 通用命令头
  }

  message Feedback {
    CommandHeader.Feedback header = 1; // 通用反馈头
    string stopped_processes = 2;      // 已停止的进程列表
  }
}

message SpeakStart {
  message Request {
    CommandHeader.Request header = 1;  // 通用命令头
  }

  message Feedback {
    CommandHeader.Feedback header = 1; // 通用反馈头
  }
}

message SpeakStop {
  message Request {
    CommandHeader.Request header = 1;  // 通用命令头
  }

  message Feedback {
    CommandHeader.Feedback header = 1; // 通用反馈头
  }
}



// 表情控制 - 微笑
message Happy {
  message Request {
    CommandHeader.Request header = 1;  // 通用命令头
  }

  message Feedback {
    CommandHeader.Feedback header = 1; // 通用反馈头
  }
}


// 表情控制 - 惊讶
message Surprise {
  message Request {
    CommandHeader.Request header = 1;  // 通用命令头
  }

  message Feedback {
    CommandHeader.Feedback header = 1; // 通用反馈头
  }
}


//表情控制-疲惫
message ExpressionTired {
  message Request {
    CommandHeader.Request header = 1;
  }

  message Feedback {
    CommandHeader.Feedback header = 1;
  }
}

//表情控制-愤怒
message ExpressionAngry {
  message Request {
    CommandHeader.Request header = 1;
  }

  message Feedback {
    CommandHeader.Feedback header = 1;
  }
}


//表情控制-悲伤
message ExpressionSadness {
  message Request {
    CommandHeader.Request header = 1;
  }

  message Feedback {
    CommandHeader.Feedback header = 1;
  }
}

//表情控制-打哈欠
message ExpressionYawn {
  message Request {
    CommandHeader.Request header = 1;
  }

  message Feedback {
    CommandHeader.Feedback header = 1;
  }
}



