import MagicString from 'magic-string'

export const transformConditionalTemplate = (code: string, id: string, env: any = {}) => {
  const source = new MagicString(code, {
    filename: id
  })

  source.replace(
    /^.*?#v-if(n?)def\s*(\S+).*[\r\n]{1,2}([\s\S]+?)\s*.*?#v-endif.*?$/gm,
    /**
     * 条件替换
     * @param _ 匹配的字符串
     * @param $1 是否为 not 模式
     * @param $2 条件
     * @param $3 code
     */
    (_, $1, $2, $3) => {
      const isNot = !!$1
      const isKeep = $2.split('||').some((v: string) => {
        let flag = false
        const [key, value] = v.split('=')
        if (value === undefined) {
          flag = !!env[key]
        } else {
          flag = String(env[key]) === value
        }
        flag = isNot ? !flag : flag
        return flag
      })
      return isKeep ? $3 : ''
    }
  )

  if (source.hasChanged()) {
    return {
      code: source.toString(),
      map: source.generateMap({
        source: id,
        file: `${id}.map`,
        includeContent: true
      })
    }
  }
}