package regras

import (
	"regexp"
	"strings"
)

// DestaqueInfo resultado de validacaoDestaque.
type DestaqueInfo struct {
	SEO  string
	Nome string
}

func TratarDestaqueVivaReal(d DestaqueInfo) string {
	if d.SEO != "" {
		return "<PublicationType>" + d.SEO + "</PublicationType>"
	}
	return ""
}

func TratarDestaqueImovelWeb(d DestaqueInfo) string {
	if d.SEO != "" {
		return "<Modelo>" + d.SEO + "</Modelo>"
	}
	return "<Modelo>Simples</Modelo>"
}

func TratarDestaqueZl(d DestaqueInfo) string {
	if d.SEO != "" {
		return "<DestaqueTipo>" + d.SEO + "</DestaqueTipo>"
	}
	return "<DestaqueTipo>0</DestaqueTipo>"
}

func TratarDestaqueMineira(d DestaqueInfo) string {
	return TratarDestaqueImovelWeb(d)
}

func TratarDestaqueAbc(d DestaqueInfo) string {
	return TratarDestaqueImovelWeb(d)
}

func TratarDestaqueMercadoLivre(d DestaqueInfo) string {
	if d.SEO != "" {
		return d.SEO
	}
	return "silver"
}

func TratarDestaqueGuide(d DestaqueInfo) string {
	if d.SEO != "" {
		return d.SEO
	}
	return "0"
}

var reTagZap = regexp.MustCompile(`"zap"\s*:\s*"([^"]+)"`)

func TratarDestaqueZap(d DestaqueInfo, tag string) string {
	if tag != "" {
		if m := reTagZap.FindStringSubmatch(tag); len(m) > 1 {
			return m[1]
		}
	}
	if d.SEO != "" {
		return d.SEO
	}
	return "1"
}

func TratarDestaqueImovelWebNovo(d DestaqueInfo) string {
	if strings.EqualFold(d.SEO, "premium") || strings.EqualFold(d.Nome, "premium") {
		return "PREMIUM"
	}
	return "STANDARD"
}

func FormatarDestaquePorPortal(idPortal int, d DestaqueInfo, tagDestaque string) string {
	switch idPortal {
	case 1, 32, 29:
		return TratarDestaqueVivaReal(d)
	case 2, 48, 15:
		return TratarDestaqueZap(d, tagDestaque)
	case 3, 5, 13, 18, 25:
		return TratarDestaqueImovelWeb(d)
	case 47:
		return ""
	case 14:
		return TratarDestaqueMercadoLivre(d)
	case 27:
		return TratarDestaqueZl(d)
	case 33:
		return TratarDestaqueMineira(d)
	case 19:
		return TratarDestaqueAbc(d)
	case 46:
		return TratarDestaqueGuide(d)
	default:
		return TratarDestaqueImovelWeb(d)
	}
}
