import { IntegrationIsActive } from '../camera/type';
import { ViewType, DrawerType } from './constant';

/** 场景标签信息 */
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 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;
};

/** 工厂信息 */
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;
  /** 下属工位列表 */
  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;
  /** 下属工厂列表 */
  children: WorkShopInfoItem[];
  /** 场景标签列表 */
  labelList: SceneLabelOrModuleItem[];
  /** 场景模板列表 */
  moduleList: SceneLabelOrModuleItem[];
  // 模板列表信息
  labelModuleList: { sceneLabel: SceneLabelOrModuleItem; sceneModule: SceneLabelOrModuleItem }[];
};

/** 公司主页配置 */
export interface UpdateCompanyLayoutParam extends Omit<UpdateViewLayoutParam, 'targetId'> {
  /** 标签id */
  labelId: number;
  targetId: number;
  /** 更新时需要上传layout布局id */
  id?: number;
}

/** ??? */
export interface LayoutResp {
  /** 创建时间 */
  createdAt: string;
  /** 自增主键 */
  id: number;
  /** 页面布局json	 */
  layout: string;
  /** 目标id: 对应公司ID/车间ID */
  targetId: number;
  viewType: ViewType;
  integrationState?: number;
}

/** ??? */
export interface UpdateViewLayoutParam {
  layout: string;
  targetId: string;
  viewType: ViewType;
}

/** 相机详情类型 */
export interface CameraItem {
  /*自增主键 */
  id: number;

  /*车间id */
  workshopId: number;

  /*工位id */
  workspaceId: number;

  /*相机名称 */
  name: string;

  /*相机编号 */
  code: string;

  /*相机IP */
  cameraIp: string;

  /*相机端口 */
  cameraPort: string;

  /*登录账号(用户名) */
  username: string;

  /*密码 */
  password: string;

  /*相机类型: haikang/dahua/anxus/huawei */
  cameraType: string;

  /*描述 */
  remark: string;

  /*相机是否支持移动缩放：0-不支持；1-支持 */
  isPtz: number;

  /*相机的ONVIF端口号 */
  onvifPort: string;

  /*添加方式： IP，NVR，RTSP */
  sourceType: string;

  /*rtsp地址 */
  rtspUrl: string;

  /*NVR id */
  nvrId: number;

  /*NVR通道号 */
  nvrChannel: string;

  /*视频编码标准，H264, H265 */
  videoStandard: string;

  /*视频服务类型，TCP, UDP, AUTO */
  videoServiceType: string;

  /*状态: 0-启用, 1-禁用 */
  isDisabled: number;

  /*创建人 */
  createdBy: number;

  /*更新人 */
  updatedBy: number;

  /*创建时间 */
  createdAt: Record<string, unknown>;

  /*更新时间 */
  updatedAt: Record<string, unknown>;

  /*0-未删除，大于0(时间戳)-已删除 */
  isDeleted: number;

  /*租户ID */
  tenantId: number;

  /*联网状态: 0-启用, 1-禁用 */
  networkingState: number;

  /*接入状态: 0-启用, 1-禁用 */
  integrationState: number;

  /*渲染选择，无渲染/某个算法 */
  render: string;

  /*版本 */
  version: number;

  /*扩展数据 */
  extra: string;

  /*业务场景 */
  sceneTemplateList: {
    /*场景id */
    sceneId: number;

    /*模板id */
    templateId: number;

    templateCode: string;
  }[];

  /* */
  pushStreamDTO: {
    /* */
    videoUrls: {
      /*推流地址(前端播放的地址) */
      pushstreamIp: string;

      /*渲染推流地址(前端播放的渲染地址) */
      pushstreamRenderUrl: string;

      /*ios推流地址(前端播放的地址) */
      m3u8PushstreamIp: string;

      /*ios推流地址(前端播放的地址) */
      m3u8PushstreamRenderIp: string;

      /*推流地址(前端播放的地址) */
      pushstreamIpAbs: string;

      /*渲染推流地址(前端播放的渲染地址) */
      pushstreamRenderUrlAbs: string;

      /*ios推流地址(前端播放的地址) */
      m3u8PushstreamIpAbs: string;

      /*ios推流地址(前端播放的地址) */
      m3u8PushstreamRenderIpAbs: string;
    };

    /*摄像头实时记录的画面 */
    imageUrl: string;
  };
}
export interface ShopMapCamera extends CameraItem {
  isSet: number;
  /** 工位名称 */
  workSpaceName: string;
  /** 相机是否接入平台 */
  integrationState?: IntegrationIsActive;
}

/** ??? */
export type WorkSpaceCameraRelative = WorkSpaceInfoItem & { cameraList: CameraItem[] };

// 传入参数类型    还缺个场景list
export interface ComAddDatas {
  code?: string; //公司编码
  createdAt?: string; //创建时间
  id?: number; //新增后返回的唯一com的id
  isDeleted?: number; //是否删除
  name: string; //公司名字
  parentId?: number; //上级公司id  无上级为0
  remark?: string; //描述
  // isDisabled?: number; //状态  0-启动  1-禁用
  updatedAt?: string;
  serial?: number; //排序
  labelList?: string[]; //创建的多个场景标签   自定义后面需要修改 这里没
  parent?: null | ComAddDatas;
  longitude?: number; //经度
  latitude?: number; //纬度
  regionCode?: string;
  thumbnail?: string;
}

// 传入参数类型
export interface WorkshopAddDatas {
  code?: string;
  companyId?: number; //公司id
  sceneLabelId?: number; //类型  1-车间  2-危险点  3-物流  4-生活园区
  createdAt?: string;
  id?: number;
  isDeleted?: number;
  name: string;
  remark?: string;
  // isDisabled?: number; //状态  0-启动  1-禁用
  updatedAt?: string;
  serial?: number;
  parent?: null | WorkshopAddDatas;
  workshopModule?: WorkShopTempleteType;
  labelList?: WorkShopTempleteType[];
  longitude?: number; //经度
  latitude?: number; //纬度
  // templete?: string; //车间模板
  // tag?: string; //场景标签
}

// 传入参数类型
export interface WorkspaceAddDatas {
  code?: string;
  createdAt?: string;
  id?: number;
  isDeleted?: number;
  name: string;
  principal?: string; //工位负责人
  remark?: string;
  // isDisabled?: number; //状态  0-启动  1-禁用
  serial?: number;
  updatedAt?: string;
  workshopId?: number; //车间id
  parent?: null | WorkspaceAddDatas;
  longitude?: number; //经度
  latitude?: number; //纬度
  // tag?: string; //场景标签
}

// 传入参数类型
export interface SceneListType<T, S> {
  code?: string;
  createdAt?: string;
  id?: number;
  isDeleted?: number;
  name?: string;
  parentId?: number;
  remark?: string;
  status?: number;
  serial?: number;
  updatedAt?: string;
  children?: T[]; //车间-工位信息
  labelList?: S[]; //创建的多个场景标签
  moduleList?: S[]; //创建得多个模板
}

/** ??? */
export interface LabelModuleListType {
  code?: string;
  createdAt?: string;
  id?: number;
  isDeleted?: number;
  name?: string;
  remark?: string;
  status?: number;
  updatedAt?: string;
}

/** ??? */
export interface GetListWorkshop<U, A> {
  code?: string;
  companyId?: number; //公司id
  sceneLabelId?: number; //类型  1-车间  2-危险点  3-物流  4-生活园区
  labelName?: string;
  createdAt?: string;
  id?: number;
  isDeleted?: number;
  name?: string;
  remark?: string;
  serial?: number;
  status?: number;
  updatedAt?: string;
  children?: U[]; //工位信息
  workshopModule?: A; //车间模板
  workshopFuncPermissions: number[];
  // tag?: string; //场景标签  自定义  后面需要修改
}

//查询场景标签
export interface CompanyType {
  tenantId: number;
  userId: number;
  createDate: string;
  modifyDate: string;
  tenantCode: string;
  tenantName: string;
  beginDate: string;
  endDate: string;
  tenantStatus: number;
  isDelete: boolean;
}

//查询场景模板
export interface InputType {
  tenantCode: string;
  tenantId: number;
  type: string;
}

//查询场景标签
export interface SceneLabelType {
  code?: string;
  createdAt?: string;
  id?: number;
  isDeleted?: number;
  name?: string;
  remark?: string;
  status?: number;
  updatedAt?: string;
}

//查询场景模板
export interface TemplateType {
  code?: string;
  createdAt?: string;
  id?: number;
  isDeleted?: number;
  name?: string;
  remark?: string;
  status?: number;
  updatedAt?: string;
}

//查询车间模板
export interface WorkshopModuleType {
  code?: string;
  createdAt?: string;
  id?: number;
  isDeleted?: number;
  name?: string;
  remark?: string;
  status?: number;
  updatedAt?: string;
}

//根据公司ID查询场景标签
export interface SceneLabelByCompanyType {
  code?: string;
  createdAt?: string;
  id?: number;
  isDeleted?: number;
  name?: string;
  remark?: string;
  status?: number;
  updatedAt?: string;
}

//保存公司-场景标签-场景模板关系
export interface SceneTempleteType {
  companyId?: number;
  createdAt?: string;
  id?: number;
  isDeleted?: number;
  remark?: string;
  sceneLabelId?: number;
  sceneModuleId?: number;
  updatedAt?: string;
}

//保存车间-车间模板关系
export interface WorkShopTempleteType {
  id?: number;
  workshopId?: number;
  workshopModuleId?: number;
  remark?: string;
  createdAt?: string;
  isDeleted?: number;
  updatedAt?: string;
}

/** ---------------------------------------------------------------------------------
 * V4版 接口定义修改说明
 * date: 2025-01-09
 * 修改了原场景相关的接口定义
 * 获取公司数据的结构整合为一个树
 * 公司-车间-工位单独的结构用于增改查的接口参数
 * 原传入参数类型不变
 * 区分公司-车间-工位类型的原因为目前树节点结构趋同但不保证以后相同
------------------------------------------------------------------------------------ */

/** 带指向父节点的公司-车间-工位树结构 */
export interface ComTreeType extends UseComType<UseWorkshopType<UseWorkspaceType>> {}

/** 公司信息类型，注释的属性会返回但不用，下同 */
export interface UseComType<T> {
  uniqueCode?: string;
  // createdAt: string;
  // createdBy: number;
  id: number;
  // isDeleted: number;
  isDisabled: number;
  latitude?: number;
  longitude?: number;
  name: string;
  nodeType: DrawerType;
  orderNum: number;
  parentId: number;
  regionCode: string;
  remark: string;
  tenantId: number;
  thumbnail: string;
  // updatedAt:string;
  // updatedBy:number;
  children?: T[];
}

/** 车间信息类型 */
export interface UseWorkshopType<T> {
  uniqueCode?: string;
  companyId: number;
  // createdAt: string;
  // createdBy: number;
  id: number;
  code?: string; //上飞定制需要
  // isDeleted: number;
  isDisabled: number;
  name: string;
  nodeType: DrawerType;
  orderNum: number;
  remark: string;
  tenantId: number;
  // updatedAt: string;
  // updatedBy: number;
  children?: T[];
}

/** 工位信息类型 */
export interface UseWorkspaceType {
  uniqueCode?: string;
  workshopId: number;
  companyId: number;
  // createdAt: string;
  // createdBy: number;
  id: number;
  code?: string; //上飞定制需要
  isDeleted: number;
  isDisabled: number;
  name: string;
  nodeType: DrawerType;
  orderNum: number;
  principalId: number;
  principalName: string;
  remark: string;
  tenantId: number;
  // updatedAt: string;
  // updatedBy: number;
}
/** --------------------------------------------------------------------------------- */

// 根据车间id查工位-相机列表
export interface GetCameraStatusByWorkshopRes {
  /*节点类型 */
  nodeType: string;

  /*车间id */
  id: number;

  /*公司id */
  companyId: number;

  /*车间名称 */
  name: string;

  /*车间编号 */
  code: string;

  /*排序序号 */
  orderNum: number;

  /*描述 */
  remark: string;

  /*状态: 0-启用, 1-禁用 */
  isDisabled: number;

  /*创建人 */
  createdBy: number;

  /*更新人 */
  updatedBy: number;

  /*创建时间 */
  createdAt: Record<string, unknown>;

  /*修改时间 */
  updatedAt: Record<string, unknown>;

  /*租户ID */
  tenantId: number;

  /*工位-相机信息 */
  children: {
    /*节点类型 */
    nodeType: string;

    /*工位id */
    id: number;

    /*车间id */
    workshopId: number;

    /*工位名称 */
    name: string;

    /*工位编号 */
    code: string;

    /*描述 */
    remark: string;

    /*排序序号 */
    orderNum: number;

    /*工位负责人 */
    principalName: string;

    /*工位负责人id */
    principalId: number;

    /*状态: 0-启用, 1-禁用 */
    isDisabled: number;

    /*创建人 */
    createdBy: number;

    /*更新人 */
    updatedBy: number;

    /*创建时间 */
    createdAt: Record<string, unknown>;

    /*更新时间 */
    updatedAt: Record<string, unknown>;

    /*租户ID */
    tenantId: number;

    /*相机信息 */
    children: {
      /*自增主键 */
      id: number;

      /*车间id */
      workshopId: number;

      /*工位id */
      workspaceId: number;

      /*相机名称 */
      name: string;

      /*相机编号 */
      code: string;

      /*相机IP */
      cameraIp: string;

      /*相机端口 */
      cameraPort: string;

      /*登录账号(用户名) */
      username: string;

      /*密码 */
      password: string;

      /*相机类型: haikang/dahua/anxus/huawei */
      cameraType: string;

      /*描述 */
      remark: string;

      /*相机是否支持移动缩放：0-不支持；1-支持 */
      isPtz: number;

      /*相机的ONVIF端口号 */
      onvifPort: string;

      /*添加方式： IP，NVR，RTSP */
      sourceType: string;

      /*rtsp地址 */
      rtspUrl: string;

      /*NVR id */
      nvrId: number;

      /*NVR通道号 */
      nvrChannel: string;

      /*视频编码标准，H264, H265 */
      videoStandard: string;

      /*视频服务类型，TCP, UDP, AUTO */
      videoServiceType: string;

      /*状态: 0-启用, 1-禁用 */
      isDisabled: number;

      /*创建人 */
      createdBy: number;

      /*更新人 */
      updatedBy: number;

      /*创建时间 */
      createdAt: Record<string, unknown>;

      /*更新时间 */
      updatedAt: Record<string, unknown>;

      /*0-未删除，大于0(时间戳)-已删除 */
      isDeleted: number;

      /*租户ID */
      tenantId: number;

      /*联网状态: 0-启用, 1-禁用 */
      networkingState: number;

      /*接入状态: 0-启用, 1-禁用 */
      integrationState: number;

      /*渲染选择，无渲染/某个算法 */
      render: string;

      /*版本 */
      version: number;

      /*扩展数据 */
      extra: string;

      /*场景-模板列表 */
      sceneTemplateList: {
        /*场景id */
        sceneId: number;

        /*模板id */
        templateId: number;
      }[];

      /* */
      pushStreamDTO: {
        /* */
        videoUrls: {
          /*推流地址(前端播放的地址) */
          pushstreamIp: string;

          /*渲染推流地址(前端播放的渲染地址) */
          pushstreamRenderUrl: string;

          /*ios推流地址(前端播放的地址) */
          m3u8PushstreamIp: string;

          /*ios推流地址(前端播放的地址) */
          m3u8PushstreamRenderIp: string;

          /*推流地址(前端播放的地址) */
          pushstreamIpAbs: string;

          /*渲染推流地址(前端播放的渲染地址) */
          pushstreamRenderUrlAbs: string;

          /*ios推流地址(前端播放的地址) */
          m3u8PushstreamIpAbs: string;

          /*ios推流地址(前端播放的地址) */
          m3u8PushstreamRenderIpAbs: string;
        };

        /*摄像头实时记录的画面 */
        imageUrl: string;
      };

      /*节点类型 */
      nodeType: string;
    }[];
  }[];
}
