import { ReactNode } from 'react'
import * as React from 'react'
import { getVisitHistory, getLastVisitPath, setLastVisitPath, removeLastVisitPath } from '../utils'

interface AppProvider {
  /**
   * 作为Select组件的type属性对应的options选项
   */
  selectTypes?: object
  [propName: string]: any
}
export interface AppProps {
  /**
   * 应用id，如果不传，被App组件包裹住的children将不会渲染，
   * 也方便之后根据该id存储以下信息：
   * 用户访问历史：getVisitHistory
   * 最后一次访问的路径：getLastVisitPath
   */
  id?: string | number
  /**
   * 返回false时重定向到/login页面
   */
  isLogin?(): boolean
  /**
   * 组件首次渲染时会调用，之后就不会再调用了，
   * 一般都是去获取信息，然后设置应用id，使 children 渲染
   */
  init?()
  /**
   * id没有时的反馈显示
   */
  fallback?: any
  /**
   * 全局配置
   */
  provider?: AppProvider
}

export default class App extends React.Component<AppProps> {
  static Fallback: typeof ReactNode
  /**
   * 获取最近访问历史
   */
  static getVisitHistory: typeof getVisitHistory
  /**
   * 获取最后一次访问的路径,用于登陆之后直接跳转到上次最后访问的页面路径
   */
  static getLastVisitPath: typeof getLastVisitPath
  static setLastVisitPath: typeof setLastVisitPath
  static removeLastVisitPath: typeof removeLastVisitPath
}
