package blockchainanalytics

import (
	"context"
	"strings"

	"github.com/niels/banking-app/backend/internal/security"
)

type LocalProvider struct{}

func NewLocalProvider() *LocalProvider {
	return &LocalProvider{}
}

func (p *LocalProvider) ScreenAddress(ctx context.Context, params ScreenAddressParams) (ScreeningResult, error) {
	_ = ctx

	id, err := security.RandomHex(12)
	if err != nil {
		return ScreeningResult{}, err
	}

	address := strings.ToLower(strings.TrimSpace(params.Address))
	result := ScreeningResult{
		Provider:            "local_blockchain_analytics",
		ExternalScreeningID: "local-chain-screening-" + id,
		Decision:            "clear",
		RiskScore:           5,
		Category:            "none",
		Matched:             false,
		Details: map[string]any{
			"context": strings.TrimSpace(params.Context),
			"network": strings.ToLower(strings.TrimSpace(params.Network)),
			"symbol":  strings.ToUpper(strings.TrimSpace(params.Symbol)),
		},
	}

	switch {
	case strings.Contains(address, "sanction") || strings.Contains(address, "terror") || strings.Contains(address, "stolen"):
		result.Decision = "block"
		result.RiskScore = 95
		result.Category = "sanctions_or_stolen_funds"
		result.Matched = true
	case strings.Contains(address, "mixer") || strings.Contains(address, "darknet") || strings.Contains(address, "gambling"):
		result.Decision = "review"
		result.RiskScore = 70
		result.Category = "high_risk_service"
		result.Matched = true
	}
	return result, nil
}
