package sanctions

import (
	"context"
	"strings"

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

type LocalProvider struct{}

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

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

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

	name := strings.ToLower(params.LegalName)
	country := strings.ToUpper(params.Country)

	result := ScreeningResult{
		Provider:            "local_sanctions",
		ExternalScreeningID: "local_screening_" + id,
		Status:              "clear",
		RiskScore:           15,
		Matched:             false,
		MatchDetails:        map[string]any{"source": "local_dev_simulator"},
	}

	if strings.Contains(name, "blocked") || strings.Contains(name, "sanction") {
		result.Status = "hit"
		result.RiskScore = 95
		result.Matched = true
		result.MatchDetails = map[string]any{"source": "local_dev_simulator", "reason": "name_match"}
		return result, nil
	}

	switch country {
	case "IR", "KP", "SY":
		result.Status = "review"
		result.RiskScore = 80
		result.Matched = true
		result.MatchDetails = map[string]any{"source": "local_dev_simulator", "reason": "country_review"}
	}

	return result, nil
}
