import * as Koa from 'koa'
import { WriteLogMiddlewareBuilder } from '@fangcha/logger/lib/koa'
import { BasicAuthProtocol, JWTProtocol, RouterApp } from '@fangcha/router'
import { FangchaSession } from '@fangcha/session'

export interface RouterSdkOptions {
  baseURL: string

  backendPort: number

  routerApp?: RouterApp
  /**
   * @default FangchaSession
   */
  Session?: typeof FangchaSession
  /**
   * @default execute ctx.session.auth()
   */
  handleAuth?: (ctx: Koa.Context) => Promise<void>
  onRequestError?: (err: Error, ctx: Koa.Context) => void
  customWriteLogMiddlewareBuilder?: WriteLogMiddlewareBuilder
  onKoaAppLaunched?: () => void
  serverTimeout?: number

  /**
   * @description If using jwtProtocol, Session default will be FangchaAdminSession
   */
  jwtProtocol?: JWTProtocol
  /**
   * @description If using basicAuthProtocol, Session default will be FangchaOpenSession
   */
  basicAuthProtocol?: BasicAuthProtocol

  bodyParserOptions?: {}
}
