package com.kdanmobile.android.lib.material.tokens.base

import java.io.File

/**
 * @classname:
 * @author: LiuXiaoLong
 * @date: 2023/2/13
 * description:
 */
object FileUtil {


    /**
     * 写入token
     * @param file 写入的文件
     * @param xmlItemName 条目名称： dimen、color...
     * @param token 写入的数据
     */
    fun writeTokens(file: File, xmlItemName : XmlParserDataCategory, token : List<Pair<String, String>>){
        file.bufferedWriter().use {
            it.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
            it.append("<resources>\n")
            for (pair in token) {
                val key = pair.first.replace("-","_").replace(".","_")
                it.append("    <${xmlItemName.name} name=\"${key}\">${pair.second}</${xmlItemName.name}>\n")
            }
            it.append("</resources>")
        }
    }


    /**
     * 解析已存在的文件，然后合并当前新增的token
     * @param tag 日志标签
     * @param file 要保存的文件位置file
     * @param baseXmlHandler 解析已存在的xml类
     * @param inputMap 输入的新增数据
     */
    fun parseAndMergeOldData(tag : String, file: File, baseXmlHandler: BaseXmlHandler, inputMap: Map<String, String>): List<Pair<String, String>>{
        val outPutMap = mutableMapOf<String, String>()
        if (file.exists()) {
            //文件已存在，获取到当前已经存在的sizing数据
            val existsDataMap = XMLUtil.getFileXmlData(file, baseXmlHandler)
            val iterator = existsDataMap.iterator()
            while (iterator.hasNext()){
                val entry = iterator.next()
                if (inputMap.containsKey(entry.key).not()) {
                    logT(tag, "移除${entry.key}:${entry.value}")
                    iterator.remove()
                }
            }
            inputMap.forEach {
                if (existsDataMap.containsKey(it.key).not()){
                    logT(tag,"新增:${it.key}:${it.value}")
                }
            }
            outPutMap.putAll(existsDataMap)
        } else {
            if (file.parentFile.exists().not()) {
                file.parentFile.mkdirs()
            }
            file.createNewFile()
        }
        outPutMap.putAll(inputMap)
        return outPutMap.toList().sortedBy {
            it.second
        }
    }

}