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

import com.kdanmobile.android.lib.material.tokens.TokenCategory
import com.kdanmobile.android.lib.material.tokens.TokenJsonType
import com.kdanmobile.android.lib.material.tokens.category.borderradius.AliasBorderRadiusParse
import com.kdanmobile.android.lib.material.tokens.category.borderradius.BorderRadiusParse
import com.kdanmobile.android.lib.material.tokens.category.borderwidth.BorderWidthParse
import com.kdanmobile.android.lib.material.tokens.category.color.AliasColorParse
import com.kdanmobile.android.lib.material.tokens.category.color.ColorParse
import com.kdanmobile.android.lib.material.tokens.category.sizeing.SizeingParse
import com.kdanmobile.android.lib.material.tokens.category.spacing.AliasSpacingParse
import com.kdanmobile.android.lib.material.tokens.category.spacing.SpacingParse
import java.io.File

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


    fun factory(tokenJsonType: TokenJsonType, category: String) : IParseToken?{
        if (tokenJsonType == TokenJsonType.Global){
            return when(category){
                TokenCategory.Global_Sizing.typeName ->{
                    //todo 此处待验证，保存的值还没有加单位，应该是px, 但需要具体项目再测一下
                    SizeingParse()
                }
                TokenCategory.Global_Spacing.typeName ->{
                    //todo 此处待验证，保存的值还没有加单位，应该是px, 但需要具体项目再测一下
                    SpacingParse()
                }
                TokenCategory.Global_BorderWidth.typeName-> {
                    BorderWidthParse()
                }
                TokenCategory.Global_Color.typeName ->{
                    ColorParse()
                }
                TokenCategory.Global_BorderRadius.typeName ->{
                    BorderRadiusParse()
                }
                else -> null
            }
        }else{
            return when(category){
                TokenCategory.Alias_Spacing.typeName ->{
//                    todo 此处待验证，保存的值还没有加单位，应该是px, 但需要具体项目再测一下
                    AliasSpacingParse()
                }
                TokenCategory.Alias_Color.typeName ->{
                    AliasColorParse()
                }
                TokenCategory.Alias_BorderRadius.typeName ->{
                    AliasBorderRadiusParse()
                }
                TokenCategory.Alias_BoxShadow.typeName ->{
                    null
                }
                else -> null
            }
        }

    }

    fun getSavePathByCategory(tokenJsonType: TokenJsonType, destRootPath : String, category: String) : String?{
        return if (tokenJsonType == TokenJsonType.Global){
            when(category){
                TokenCategory.Global_Sizing.typeName-> "result/global_sizing.xml"
                TokenCategory.Global_Spacing.typeName -> "result/global_spacing.xml"
                TokenCategory.Global_Color.typeName -> "result/global_colors.xml"
                TokenCategory.Global_BorderWidth.typeName -> "result/global_border_width.xml"
                TokenCategory.Global_BorderRadius.typeName -> "result/global_border_radius.xml"
                else -> ""
            }
        }else{
            when(category){

                TokenCategory.Alias_Spacing.typeName -> "result/alias_spacing.xml"
                TokenCategory.Alias_Color.typeName -> "result/alias_color.xml"
                TokenCategory.Alias_BorderRadius.typeName -> "result/alias_border_radius.xml"
                TokenCategory.Alias_BoxShadow.typeName -> "result/alias_box_shadow.xml"
                else -> ""
            }
        }.run {
            if (isNullOrEmpty().not()){
                File(destRootPath, this).absolutePath
            }else{
                null
            }
        }

    }
}