package cacheApi

import (
	"epur-pay/model"
	"epur-pay/pkg/rds"
	"epur-pay/pkg/utils"
	"sync"
)

type Language struct {
	List            []model.SysLanguage
	Map             *sync.Map
	TranslateMap    *sync.Map
	DefaultLanguage string
	duplicate       *Language
}

func (p *Language) Refresh() *Language {

	p.duplicate = &Language{}
	p.duplicate.Map = new(sync.Map)
	p.duplicate.TranslateMap = new(sync.Map)

	utils.Error(rds.DB.Raw(`select * from sys_language order by sort`).Scan(&p.duplicate.List).Error)

	for _, v := range p.duplicate.List {
		if v.IsDefault == "0" {
			p.duplicate.DefaultLanguage = v.Akey
		}
	}
	if len(p.duplicate.DefaultLanguage) <= 0 {
		p.duplicate.DefaultLanguage = "en_US"
	}

	// 资源文件
	translate := []model.Translate{}
	utils.Error(rds.DB.Table(model.Translate{}.TableName()).Where(`type = ?`, 0).Order(`id asc`).Scan(&translate).Error)

	for idx, v := range translate {
		p.duplicate.TranslateMap.Store(v.LanguageKey, translate[idx].To)
	}

	return p.duplicate
}

func (p *Language) GetLang(lang string, key string) string {

	if trans, ok := p.TranslateMap.Load(key); ok {
		for _, v := range trans.(model.TranslateTos) {
			if v.GoogleKey == lang {
				return v.To
			}
		}
	}

	return ""
}

func (p *Language) GetTranslate(key string) model.TranslateTos {
	if row, ok := p.TranslateMap.Load(key); ok {
		return row.(model.TranslateTos)
	}
	return nil
}

func (p *Language) GetDefaultLang(key string) string {
	row, _ := p.Map.Load(p.DefaultLanguage)
	result, _ := row.(*sync.Map).Load(key)
	return result.(string)
}