import type { RobotInfo, RobotRealtimeInfo } from '@api/robot';
import type { Pen } from '@meta2d/core';

import type { MapAreaType, MapPointType, MapRoutePassType, MapRouteType } from './constant';

export interface MapPen extends Pen {
  label?: string; // 展示名称
  desc?: string; // 描述

  point?: MapPointInfo; // 点位信息
  route?: MapRouteInfo; // 线路信息
  area?: MapAreaInfo; // 区域信息
  robot?: MapRobotInfo; // 实时机器人信息

  attrs?: Record<string, unknown>; // 额外属性
  activeAttrs?: Array<string>; // 已激活的额外属性

  properties?: unknown; // 第三方附加参数
}

//#region 点位
export interface MapPointInfo {
  type: MapPointType; // 点位类型
  robots?: Array<RobotInfo['id']>; // 绑定机器人id集合
  actions?: Array<string>; // 绑定动作点id集合
  isBlock?: boolean; // 是否禁行
  isForbidAvoid?: boolean; // 是否禁止避让
}
//#endregion

//#region 线路
export interface MapRouteInfo {
  type: MapRouteType; // 线路类型
  direction?: -1 | 1; // 方向
  pass?: MapRoutePassType; // 可通行类型
  c1?: Point; // 控制点1
  c2?: Point; // 控制点2
}
//#endregion

//#region 区域
export interface MapAreaInfo {
  type: MapAreaType; // 区域类型
  points?: Array<string>; // 绑定点位id集合
  routes?: Array<string>; // 绑定线路id集合
}
//#endregion

//#region 机器人
export type MapRobotInfo = Pick<RobotRealtimeInfo, 'type' | 'active' | 'path'>;
//#endregion

export type Point = Record<'x' | 'y', number>;
export type Rect = Record<'x' | 'y' | 'width' | 'height', number>;
export type AnchorPosition = 't' | 'b' | 'l' | 'r';
