declare namespace GT {
  interface IActive {
    // 页面唯一标识符
    key: string;
    // 页面唯一id
    id: number;
    // 页面参数
    params: { [key: string]: any };
    // 历史记录
    history?: IActive[];
    options?: IPageOptions;
  }

  interface IPageOptions {
    // 坐标
    left?: string | number;
    top?: string | number;
    right?: string | number;
    // 尺寸
    width?: string | number;
    height?: string | number;

    name?: string; // 页面标题
    limit?: boolean; // 拖拽是否可超出父级
    drag?: boolean; // 是否可拖拽
    zoom?: boolean; // 是否可放大
    minWidth?: number; // 最小宽度
    minHeight?: number; // 最小高度
    header?: boolean; // 是否有title
    background?: boolean; // 背景色
  }

  interface IRouterOptions {
    // 异步组件地址
    component: () => Promise<any>;
    models?: () => Promise<any>;
    // 页面唯一标识符
    key: number;
    options?: IPageOptions;
  }

  interface IPageProps {
    id: number;
    params: any;
    router: IRouterFunc;
  }

  interface IRouterFunc {
    // 根据key新增页面
    add: (
      key: string,
      params?: any,
      callback?: (pageId: number) => void,
    ) => void;
    // 根据id删除页面
    remove: (id: number) => void;
    // 根据id跳转页面
    push: (key: string, params?: any, id?: number) => void;
    // 根据id回退页面
    back: (id: number) => void;
  }
}

interface IStateHandler {
  onStart: () => void;
  onUpdate: () => void;
  onStop: () => void;
}
