import { ReactNode, LazyExoticComponent, ComponentType } from 'react'
import { RouteObject } from 'react-router-dom'

/**
 * 用户版本类型
 */
export type UserVersion = 'basic' | 'advanced' | 'premium'

/**
 * 左侧导航项配置
 */
export interface SideNavItem {
  id: string
  label: string
  path: string
  icon?: ReactNode
  children?: SideNavItem[]
}

/**
 * 模块定义接口
 * 每个业务模块必须实现这个接口
 */
export interface ModuleDefinition {
  /** 模块唯一标识 */
  id: string
  
  /** 模块名称（显示在导航栏） */
  name: string
  
  /** 模块路由前缀 */
  path: string
  
  /** 模块图标组件（可选） */
  icon?: ComponentType
  
  /** 模块入口组件（懒加载） */
  component: LazyExoticComponent<ComponentType<any>>
  
  /** 模块路由配置 */
  routes?: RouteObject[]
  
  /** 模块是否有左侧导航 */
  hasSideNav?: boolean
  
  /** 左侧导航配置（如果有） */
  sideNavConfig?: SideNavItem[]
  
  /** 权限要求（可选） */
  requiredVersion?: UserVersion
  
  /** 是否为占位模块 */
  placeholder?: boolean
  
  /** 是否支持独立部署 */
  standalone?: boolean
  
  /** 是否为外部模块（如Java团队开发） */
  isExternal?: boolean
  
  /** 模块描述 */
  description?: string
}

