package regras

import (
	"fmt"
	"math/rand"
	"strings"
	"time"
)

// ZapOverrides campos sobrescritos por hacks id_master (Portal_zap.php).
type ZapOverrides struct {
	IPTU           string
	ValorCondominio string
	Video          string
	AnoConstrucao  string
	ViewEndereco   *int
}

func MontarCaracteristicasZapXML(features []string) string {
	if len(features) == 0 {
		return ""
	}
	var b strings.Builder
	for _, f := range features {
		f = strings.TrimSpace(f)
		if f == "" {
			continue
		}
		b.WriteString("<")
		b.WriteString(f)
		b.WriteString(">1</")
		b.WriteString(f)
		b.WriteString(">")
	}
	return b.String()
}

func AplicarHacksMasterZap(idMaster int, refCaixa, valorIPTU, valorCondominio, anoConstrucao, video string) ZapOverrides {
	o := ZapOverrides{
		IPTU:            TipoPrecoSimples(valorIPTU),
		ValorCondominio: valorCondominioSemCentavos(valorCondominio),
		Video:           video,
		AnoConstrucao:  formatAnoConstrucaoZap(anoConstrucao),
	}
	switch idMaster {
	case 201:
		o.IPTU = TipoPrecoSimples(valorIPTU)
		o.ValorCondominio = valorCondominioSemCentavos(valorCondominio)
		o.Video = "https://www.youtube.com/watch?v=DXwBDwPn9YQ"
		v := 1
		o.ViewEndereco = &v
	case 90821573:
		o.IPTU = TipoPrecoSimples(valorIPTU)
		o.ValorCondominio = valorCondominioSemCentavos(valorCondominio)
		if strings.TrimSpace(anoConstrucao) == "" {
			o.AnoConstrucao = "<AnoConstrucao>2010</AnoConstrucao>"
		}
	case 8409:
		o.IPTU = TipoPrecoSimples(valorIPTU)
		o.ValorCondominio = valorCondominioSemCentavos(valorCondominio)
	case 90821604:
		if refCaixa != "" {
			o.Video = "https://youtu.be/YRGXmIrznKo"
		}
		if strings.TrimSpace(anoConstrucao) == "" {
			rng := rand.New(rand.NewSource(time.Now().UnixNano()))
			o.AnoConstrucao = fmt.Sprintf("<AnoConstrucao>%d</AnoConstrucao>", 1900+rng.Intn(101))
		}
		if valorIPTU == "" || valorIPTU == "0" || valorIPTU == "0.00" {
			o.IPTU = "55555"
		} else {
			o.IPTU = TipoPrecoSimples(valorIPTU)
		}
		if valorCondominio == "" || valorCondominio == "0" || valorCondominio == "0.00" {
			o.ValorCondominio = "55555"
		} else {
			o.ValorCondominio = valorCondominioSemCentavos(valorCondominio)
		}
	}
	return o
}

func formatAnoConstrucaoZap(ano string) string {
	ano = strings.TrimSpace(ano)
	if ano == "" {
		return ""
	}
	return fmt.Sprintf("<AnoConstrucao>%s</AnoConstrucao>", ano)
}

func valorCondominioSemCentavos(valor string) string {
	if valor == "" || valor == "0.00" || valor == "0" {
		return ""
	}
	parts := strings.Split(valor, ".")
	return parts[0]
}

func BanheiroZap(banheiros string) string {
	if banheiros == "0" {
		return "1"
	}
	return SoNumero(banheiros)
}
