package product

import (
	"strings"

	"leadb2b.org/internal/api"
	"leadb2b.org/internal/render"
)

type MaskedCompany struct {
	api.EstabelecimentoOut
	AlreadyWorking bool
	HasWhatsApp    bool
	CNPJMasked     string
}

func MaskListingItem(item api.EstabelecimentoOut, working map[string]bool) MaskedCompany {
	m := MaskedCompany{EstabelecimentoOut: item}
	m.DDD1 = nil
	m.Telefone1 = nil
	m.DDD2 = nil
	m.Telefone2 = nil
	m.CorreioEletronico = nil
	m.AlreadyWorking = working[item.CNPJ]
	m.HasWhatsApp = HasWhatsApp(item)
	m.CNPJMasked = maskCNPJ(item.CNPJ)
	return m
}

func maskCNPJ(cnpj string) string {
	d := render.ExtractCNPJDigitsOnly(cnpj)
	if len(d) < 14 {
		return "**.****/****-**"
	}
	return "**." + d[2:5] + "." + d[5:8] + "/" + d[8:12] + "-**"
}

func HasWhatsApp(item api.EstabelecimentoOut) bool {
	return isMobilePhone(item.DDD1, item.Telefone1) || isMobilePhone(item.DDD2, item.Telefone2)
}

func isMobilePhone(ddd, tel *string) bool {
	if ddd == nil || tel == nil {
		return false
	}
	d := strings.TrimSpace(*ddd)
	t := strings.Map(func(r rune) rune {
		if r >= '0' && r <= '9' {
			return r
		}
		return -1
	}, *tel)
	if d == "" || len(t) < 8 {
		return false
	}
	return len(t) >= 9 && t[0] == '9'
}

func MaxPageSize(planSlug string) int {
	if planSlug == "trial" {
		return 10
	}
	return 20
}
