const { resp } = require('src/utils/response/index.js')
const { get: getCacheInstance } = require('src/utils/cache.js')
const sso = require('src/utils/sso/index.js')
const uuid = require('uuid')
const url = require('url')

const controller = {}
module.exports = controller

controller.loginSSO = () => async (ctx) => {
  const { back_url: backURL } = ctx.query

  const state = uuid.v4()

  const authURL = sso.getAuthURL(state)

  // store back url to cache
  const cacheKey = `login-${state}`
  const cache = getCacheInstance()

  cache.set(cacheKey, JSON.stringify({ back_url: backURL }), true)

  const u = new url.URL(authURL)

  ctx.resp(resp.Success, { url: u.toString() })
}

controller.logout = () => async (ctx) => {
  let link = ''

  if (ctx.token.sso) {
    link = sso.getLogoutURL()
  }

  ctx.resp(resp.Success, { url: link })
}

controller.getInfo = () => async (ctx) => {
  ctx.resp(resp.Success, ctx.token.info)
}
