import {PageInfo} from "./PageInfo";
import * as convert from 'xml-js'
import * as fs from 'fs'
import * as path from 'path'
export function writeRiotPage(info:PageInfo, pathname:string) {
const layin = Object.assign({}, info.content)
const xml = convert.js2xml(layin, {
compact:false,
spaces: 4,
attributeValueFn:riotProp
})
let page = `<${info.id}-page>\n`
if(!info.noTitle) {
page += '\n'
}
page += xml
page += `
`
page += `\n${info.id}-page>\n`
const srcPages = 'src'+path.sep+'pages'
const genPages = '.gen'+path.sep+'pages'
pathname = pathname.replace(srcPages, genPages)
let dir = pathname.substring(0,pathname.lastIndexOf(path.sep))
if(!fs.existsSync(dir)) {
fs.mkdirSync(dir, {recursive:true})
}
fs.writeFileSync(pathname, page)
}
function riotProp(val: string) {
let pos = 0
while(pos < val.length) {
pos = val.indexOf('$', pos)
if(pos === -1) break;
let endPos = val.indexOf(' ', pos+1)
if(endPos === -1) endPos = val.length
if(pos > 0 && val.charAt(pos-1)== '\\') {
val = val.substring(0, pos-1)+val.substring(pos)
}
if (val.charAt(pos) === '$') {
let isData = false
if (val.charAt(pos+1) === '$') {
isData = true
}
let name = val.substring(isData ? pos+2 : pos+1, endPos)
let data = isData ? "data." : ""
let insert = `{b('${data}${name}')}`
if(name.indexOf('(') > 0 && name.indexOf(')') === name.length-1) {
let pn = name.indexOf('(')+1
let cn = name.indexOf(')', pn)
let pm = name.substring(pn, cn)
let comma = pm ? ', ': ''
name = name.substring(0, pn-1)
insert = `{${name}(this${comma}${pm})}`
}
val = val.substring(0, pos)+insert+val.substring(endPos)
pos += insert.length
}
}
return val
}