import { http } from '@/utils/http/axios';
import { ViolationHandleStat } from '@/views/dashboard/home/types';

/** 场景标签信息 */
export type SceneLabelOrModuleItem = {
  /** 标签id */
  id: number;
  /** 标签代码 */
  code: string;
  /** 创建时间 */
  createdAt: string;
  /** 0-未删除，大于0-已删除 */
  isDeleted: number;
  /** 标签名称 */
  name: string;
  /** 说明 */
  remark: string;
  /** 状态: 0-正常，1-不正常 */
  status: number;
  /** 更新时间 */
  updatedAt: string;
};

/** 相机信息 */
export type CameraInfoItem = {
  /** 相机id */
  id: number;

  /** 相机IP */
  cameraIp: string;
  /**	相机协议类型 */
  cameraType: string;
  /** 相机端口 */
  cameraPort: string;
  /** 相机ID */
  code: string;
  /** 工位场景Id */
  workspaceId: string;
  /** 描述 */
  remark?: string;
  /** 相机名称 */
  name: string;
  /** 相机MAC地址 */
  cameraMac: string;
  /** 车间场景名称 */
  workshopName: string;
  /** 工位场景名称 */
  workspaceName: string;
  /** 联网状态: 0-启用, 1-禁用 */
  networkingState: number;
  /** 是否删除： 0-未删除, 1-删除 */
  isDeleted: number;
  /** 状态: 0-启用, 1-禁用 */
  status: number;
  /** 用户名 */
  username?: string;
  /** 密码 */
  password?: string;
  /** 层级类型 */
  nodeType: string;
};

/** 工位信息 */
export type WorkSpaceInfoItem = {
  /** 工位id */
  id: number;
  /** 所属工厂id */
  workshopId: number;
  /** 工位名称 */
  name: string;
  /** 工位code */
  code: string;
  /** 工位描述 */
  remark: string;
  /** 状态: 0-启用, 1-禁用 */
  status: number;
  /** 创建时间 */
  createdAt: string;
  /** 更新时间 */
  updatedAt: string;
  /** 	0-未删除，大于0-已删除 */
  isDeleted: number;
  /** 工位负责人 */
  principal: string;
  /** 排序序号 */
  serial: number;
  /** 层级类型 */
  nodeType: string;
  /** 下属相机列表 */
  children: CameraInfoItem[];
};

/** 工厂信息 */
export type WorkShopInfoItem = {
  /** 工厂id */
  id: number;
  /** 所属公司id */
  companyId: number;
  /** 1-生产安全 2-安全环保 */
  type: number;
  /** 工厂名称 */
  name: string;
  /** 工厂code */
  code: string;
  /** 工厂描述 */
  remark: string;
  /** 状态: 0-启用, 1-禁用 */
  status: number;
  /** 创建时间 */
  createdAt: string;
  /** 更新时间 */
  updatedAt: string;
  /** 	0-未删除，大于0-已删除 */
  isDeleted: number;
  /** 层级类型 */
  nodeType: string;
  /** 下属工位列表 */
  children: WorkSpaceInfoItem[];
  /** 场景标签 */
  labelName: string;
  /** 场景标签id */
  sceneLabelId: number;
  /** 排序序号 */
  serial: number;
  /** 车间模板 */
  workshopModule: SceneLabelOrModuleItem;
};

/** 公司信息 */
export type CompanyInfoItem = {
  /** 公司id */
  id: number;
  /** 上级公司ID, 无上级为0 */
  parentId: number;
  /** 公司名称 */
  name: string;
  /** 公司code */
  code: string;
  /** 公司描述 */
  remark: string;
  /** 状态: 0-启用, 1-禁用 */
  status: number;
  /** 创建时间 */
  createdAt: string;
  /** 更新时间 */
  updatedAt: string;
  /** 排序序号 */
  serial: number;
  /** 	0-未删除，大于0-已删除 */
  isDeleted: number;
  /** 层级类型 */
  nodeType: string;
  /** 下属工厂列表 */
  children: WorkShopInfoItem[];
  /** 场景标签列表 */
  labelList: SceneLabelOrModuleItem[];
  /** 场景模板列表 */
  moduleList: SceneLabelOrModuleItem[];
};

/** 根据用户权限查询场景树 */
export const getAuthSceneList = () => {
  return http.request<CompanyInfoItem[]>({
    url: '/dataPreview/getList',
    method: 'get',
  });
};

/** 算法信息 */
export type AlgoInfo = {
  /**	算法提供编码 */
  code: string;
  /** 创建时间 */
  createdAt: string;
  /** id */
  id: number;
  /** 0-未删除，大于0(时间戳)-已删除 */
  isDeleted: number;
  /**	算法名称 */
  name: string;
  /** 推送链接提示 */
  pushLinkPrompt: string;
  /** 推送语句 */
  pushStatement: string;
  /** 描述 */
  remark: string;
  /** 前端显示名称 */
  showName: string;
  /** 状态: 0-启用, 1-禁用 */
  status: number;
  /** 更新时间 */
  updatedAt: string;
  /** 展示视频的地址 */
  url: string;
};

/** 算法配置信息 */
export type AlgoConfig = {
  /** id */
  id: number;
  /** 算法id */
  algoId: number;
  /** 算法信息 */
  algoInfo: AlgoInfo;
  /** 相机id */
  cameraId: number;
  /** 创建时间 */
  createdAt: string;
  /** 检测频率 */
  detectionFrequency: number;
  /** 检测时间 */
  detectionTime: string;
  /** 电子围栏: 0-启用, 1-禁用 */
  electronicFence: number;
  /** 	0-未删除，大于0(时间戳)-已删除 */
  isDeleted: number;
  /** 算法状态: 0-启用, 1-禁用 */
  status: number;
  /** 更新时间 */
  updatedAt: string;
};

/** 根据相机ID查询算法列表 */
export const getAlgoByCameraId = (params: { cameraId: number }) => {
  return http.request<AlgoConfig[]>({
    url: '/dataPreview/getAlgo',
    method: 'get',
    params,
  });
};

export type ViolationsQueryParam = {
  /** 起始日期 */
  startDate: string;
  /** 结束日期 */
  endDate: string;
  /** 用户名 */
  userName: string;
};

export type ViolationCount = {
  /** 算法违规数量统计 */
  violationAlgoList: {
    /** 算法名称 */
    name: string;
    /** 算法违规占比 */
    proportion: number;
  }[];
  /** 违规处理情况统计 */
  statusCountList: {
    /** 类型 */
    name: ViolationHandleStat;
    /** 数量 */
    value: number;
  }[];
};

/** 根据用户权限查询违规记录 */
export const getViolation = (params: ViolationsQueryParam) => {
  return http.request<ViolationCount>(
    {
      url: '/dataPreview/getViolation',
      method: 'get',
      params,
    },
    {
      isShowErrorMessage: false,
    },
  );
};
