package handlers

import (
	"strings"

	"leadb2b.org/internal/api"
)

func registerErrorMessage(err error) string {
	if err == nil {
		return "Não foi possível criar a conta. Tente novamente."
	}
	if apiErr, ok := err.(*api.APIError); ok {
		if msg := strings.TrimSpace(apiErr.Message); msg != "" && !strings.HasPrefix(msg, "{") {
			return msg
		}
		switch apiErr.Status {
		case 409:
			return "Este e-mail já está cadastrado. Faça login ou use outro e-mail."
		case 403:
			return "O cadastro de novas contas está temporariamente desabilitado."
		case 422:
			return "E-mail ou senha inválidos. Senha: mín. 5 caracteres, com letra, número e caractere especial."
		case 429, 503:
			return "Serviço temporariamente indisponível. Tente novamente em instantes."
		}
	}
	return "Não foi possível conectar ao serviço. Verifique sua conexão e tente novamente."
}

func loginErrorMessage(err error) string {
	if apiErr, ok := err.(*api.APIError); ok {
		if msg := strings.TrimSpace(apiErr.Message); msg != "" && !strings.HasPrefix(msg, "{") {
			return msg
		}
	}
	if err != nil && strings.Contains(err.Error(), "decode response") {
		return "Login na API ok, mas falha ao carregar sua sessão. Tente novamente ou contate o suporte."
	}
	return "E-mail ou senha inválidos."
}

func resetErrorMessage(err error) string {
	if apiErr, ok := err.(*api.APIError); ok {
		if msg := strings.TrimSpace(apiErr.Message); msg != "" && !strings.HasPrefix(msg, "{") {
			return msg
		}
		switch apiErr.Status {
		case 422:
			return "Senha inválida. Use mín. 5 caracteres, com letra, número e caractere especial."
		case 400, 404:
			return "Link expirado ou inválido. Solicite um novo link de recuperação."
		}
	}
	return "Link expirado ou senha inválida. Use mín. 5 caracteres, com letra, número e caractere especial."
}
