package result

// import (
// 	"fmt"
// 	"testing"
// 	"time"

// 	"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
// 	"github.com/stretchr/testify/assert"
// )

// // TestNFLMarkets covers all American Football (NFL) market types defined in the domain.
// // For each market (Money Line, Spread, Total Points), it tests home/away win, draw, void, and invalid input scenarios.
// func TestNFLMarkets(t *testing.T) {
// 	t.Log("Testing NFL (American Football) Markets")
// 	markets := []struct {
// 		marketID int64
// 		name     string
// 	}{
// 		{int64(domain.AMERICAN_FOOTBALL_MONEY_LINE), "MONEY_LINE"},
// 		{int64(domain.AMERICAN_FOOTBALL_SPREAD), "SPREAD"},
// 		{int64(domain.AMERICAN_FOOTBALL_TOTAL_POINTS), "TOTAL_POINTS"},
// 	}

// 	for _, m := range markets {
// 		t.Run(m.name, func(t *testing.T) {
// 			// Each subtest below covers a key scenario for the given NFL market.
// 			switch m.marketID {
// 			case int64(domain.AMERICAN_FOOTBALL_MONEY_LINE):
// 				// Home win, away win, draw, and invalid OddHeader for Money Line
// 				t.Run("Home Win", func(t *testing.T) {
// 					status, err := EvaluateNFLMoneyLine(domain.BetOutcome{MarketID: m.marketID, OddHeader: "1"}, struct{ Home, Away int }{Home: 21, Away: 14})
// 					t.Logf("Market: %s, Scenario: Home Win", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_WIN, status)
// 				})
// 				t.Run("Away Win", func(t *testing.T) {
// 					status, err := EvaluateNFLMoneyLine(domain.BetOutcome{MarketID: m.marketID, OddHeader: "2"}, struct{ Home, Away int }{Home: 14, Away: 21})
// 					t.Logf("Market: %s, Scenario: Away Win", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_WIN, status)
// 				})
// 				t.Run("Draw", func(t *testing.T) {
// 					status, err := EvaluateNFLMoneyLine(domain.BetOutcome{MarketID: m.marketID, OddHeader: "1"}, struct{ Home, Away int }{Home: 17, Away: 17})
// 					t.Logf("Market: %s, Scenario: Draw", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_LOSS, status)
// 				})
// 				t.Run("Invalid OddHeader", func(t *testing.T) {
// 					status, err := EvaluateNFLMoneyLine(domain.BetOutcome{MarketID: m.marketID, OddHeader: "X"}, struct{ Home, Away int }{Home: 10, Away: 7})
// 					t.Logf("Market: %s, Scenario: Invalid OddHeader", m.name)
// 					assert.Error(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_PENDING, status)
// 				})
// 			case int64(domain.AMERICAN_FOOTBALL_SPREAD):
// 				t.Run("Home Win with Handicap", func(t *testing.T) {
// 					status, err := EvaluateNFLSpread(domain.BetOutcome{MarketID: m.marketID, OddHeader: "1", OddHandicap: "-3.5"}, struct{ Home, Away int }{Home: 24, Away: 20})
// 					t.Logf("Market: %s, Scenario: Home Win with Handicap", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_WIN, status)
// 				})
// 				t.Run("Away Win with Handicap", func(t *testing.T) {
// 					status, err := EvaluateNFLSpread(domain.BetOutcome{MarketID: m.marketID, OddHeader: "2", OddHandicap: "+3.5"}, struct{ Home, Away int }{Home: 20, Away: 24})
// 					t.Logf("Market: %s, Scenario: Away Win with Handicap", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_WIN, status)
// 				})
// 				t.Run("Push (Void)", func(t *testing.T) {
// 					status, err := EvaluateNFLSpread(domain.BetOutcome{MarketID: m.marketID, OddHeader: "1", OddHandicap: "0"}, struct{ Home, Away int }{Home: 21, Away: 21})
// 					t.Logf("Market: %s, Scenario: Push (Void)", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_VOID, status)
// 				})
// 				t.Run("Non-numeric Handicap", func(t *testing.T) {
// 					status, err := EvaluateNFLSpread(domain.BetOutcome{MarketID: m.marketID, OddHeader: "1", OddHandicap: "notanumber"}, struct{ Home, Away int }{Home: 21, Away: 14})
// 					t.Logf("Market: %s, Scenario: Non-numeric Handicap", m.name)
// 					assert.Error(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_PENDING, status)
// 				})
// 			case int64(domain.AMERICAN_FOOTBALL_TOTAL_POINTS):
// 				t.Run("Over Win", func(t *testing.T) {
// 					status, err := EvaluateNFLTotalPoints(domain.BetOutcome{MarketID: m.marketID, OddHeader: "Over", OddName: "44.5"}, struct{ Home, Away int }{Home: 30, Away: 20})
// 					t.Logf("Market: %s, Scenario: Over Win", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_WIN, status)
// 				})
// 				t.Run("Under Win", func(t *testing.T) {
// 					status, err := EvaluateNFLTotalPoints(domain.BetOutcome{MarketID: m.marketID, OddHeader: "Under", OddName: "44.5"}, struct{ Home, Away int }{Home: 20, Away: 17})
// 					t.Logf("Market: %s, Scenario: Under Win", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_WIN, status)
// 				})
// 				t.Run("Push (Void)", func(t *testing.T) {
// 					status, err := EvaluateNFLTotalPoints(domain.BetOutcome{MarketID: m.marketID, OddHeader: "Over", OddName: "37"}, struct{ Home, Away int }{Home: 20, Away: 17})
// 					t.Logf("Market: %s, Scenario: Push (Void)", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_VOID, status)
// 				})
// 				t.Run("Non-numeric OddName", func(t *testing.T) {
// 					status, err := EvaluateNFLTotalPoints(domain.BetOutcome{MarketID: m.marketID, OddHeader: "Over", OddName: "notanumber"}, struct{ Home, Away int }{Home: 20, Away: 17})
// 					t.Logf("Market: %s, Scenario: Non-numeric OddName", m.name)
// 					assert.Error(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_PENDING, status)
// 				})
// 			}
// 		})
// 	}
// }

// // TestRugbyMarkets covers all Rugby (Union & League) market types defined in the domain.
// // For each market (Money Line, Spread, Handicap, Total Points), it tests home/away win, draw, void, and invalid input scenarios.
// func TestRugbyMarkets(t *testing.T) {
// 	t.Log("Testing Rugby Markets (Union & League)")
// 	markets := []struct {
// 		marketID int64
// 		name     string
// 	}{
// 		{int64(domain.RUGBY_MONEY_LINE), "MONEY_LINE"},
// 		{int64(domain.RUGBY_SPREAD), "SPREAD"},
// 		{int64(domain.RUGBY_TOTAL_POINTS), "TOTAL_POINTS"},
// 		{int64(domain.RUGBY_HANDICAP), "HANDICAP"},
// 	}

// 	for _, m := range markets {
// 		t.Run(m.name, func(t *testing.T) {
// 			// Each subtest below covers a key scenario for the given Rugby market.
// 			switch m.marketID {
// 			case int64(domain.RUGBY_MONEY_LINE):
// 				// Home win, away win, draw, and invalid OddHeader for Money Line
// 				t.Run("Home Win", func(t *testing.T) {
// 					status, err := EvaluateRugbyMoneyLine(domain.BetOutcome{MarketID: m.marketID, OddHeader: "1"}, struct{ Home, Away int }{Home: 30, Away: 20})
// 					t.Logf("Market: %s, Scenario: Home Win", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_WIN, status)
// 				})
// 				t.Run("Away Win", func(t *testing.T) {
// 					status, err := EvaluateRugbyMoneyLine(domain.BetOutcome{MarketID: m.marketID, OddHeader: "2"}, struct{ Home, Away int }{Home: 20, Away: 30})
// 					t.Logf("Market: %s, Scenario: Away Win", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_WIN, status)
// 				})
// 				t.Run("Draw", func(t *testing.T) {
// 					status, err := EvaluateRugbyMoneyLine(domain.BetOutcome{MarketID: m.marketID, OddHeader: "1"}, struct{ Home, Away int }{Home: 25, Away: 25})
// 					t.Logf("Market: %s, Scenario: Draw", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_LOSS, status)
// 				})
// 				t.Run("Invalid OddHeader", func(t *testing.T) {
// 					status, err := EvaluateRugbyMoneyLine(domain.BetOutcome{MarketID: m.marketID, OddHeader: "X"}, struct{ Home, Away int }{Home: 10, Away: 7})
// 					t.Logf("Market: %s, Scenario: Invalid OddHeader", m.name)
// 					assert.Error(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_PENDING, status)
// 				})
// 			case int64(domain.RUGBY_SPREAD), int64(domain.RUGBY_HANDICAP):
// 				t.Run("Home Win with Handicap", func(t *testing.T) {
// 					status, err := EvaluateRugbySpread(domain.BetOutcome{MarketID: m.marketID, OddHeader: "1", OddHandicap: "-6.5"}, struct{ Home, Away int }{Home: 28, Away: 20})
// 					t.Logf("Market: %s, Scenario: Home Win with Handicap", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_WIN, status)
// 				})
// 				t.Run("Away Win with Handicap", func(t *testing.T) {
// 					status, err := EvaluateRugbySpread(domain.BetOutcome{MarketID: m.marketID, OddHeader: "2", OddHandicap: "+6.5"}, struct{ Home, Away int }{Home: 20, Away: 28})
// 					t.Logf("Market: %s, Scenario: Away Win with Handicap", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_WIN, status)
// 				})
// 				t.Run("Push (Void)", func(t *testing.T) {
// 					status, err := EvaluateRugbySpread(domain.BetOutcome{MarketID: m.marketID, OddHeader: "1", OddHandicap: "0"}, struct{ Home, Away int }{Home: 21, Away: 21})
// 					t.Logf("Market: %s, Scenario: Push (Void)", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_VOID, status)
// 				})
// 				t.Run("Non-numeric Handicap", func(t *testing.T) {
// 					status, err := EvaluateRugbySpread(domain.BetOutcome{MarketID: m.marketID, OddHeader: "1", OddHandicap: "notanumber"}, struct{ Home, Away int }{Home: 21, Away: 14})
// 					t.Logf("Market: %s, Scenario: Non-numeric Handicap", m.name)
// 					assert.Error(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_PENDING, status)
// 				})
// 			case int64(domain.RUGBY_TOTAL_POINTS):
// 				t.Run("Over Win", func(t *testing.T) {
// 					status, err := EvaluateRugbyTotalPoints(domain.BetOutcome{MarketID: m.marketID, OddHeader: "Over", OddName: "40.5"}, struct{ Home, Away int }{Home: 25, Away: 20})
// 					t.Logf("Market: %s, Scenario: Over Win", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_WIN, status)
// 				})
// 				t.Run("Under Win", func(t *testing.T) {
// 					status, err := EvaluateRugbyTotalPoints(domain.BetOutcome{MarketID: m.marketID, OddHeader: "Under", OddName: "40.5"}, struct{ Home, Away int }{Home: 15, Away: 20})
// 					t.Logf("Market: %s, Scenario: Under Win", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_WIN, status)
// 				})
// 				t.Run("Push (Void)", func(t *testing.T) {
// 					status, err := EvaluateRugbyTotalPoints(domain.BetOutcome{MarketID: m.marketID, OddHeader: "Over", OddName: "35"}, struct{ Home, Away int }{Home: 20, Away: 15})
// 					t.Logf("Market: %s, Scenario: Push (Void)", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_VOID, status)
// 				})
// 				t.Run("Non-numeric OddName", func(t *testing.T) {
// 					status, err := EvaluateRugbyTotalPoints(domain.BetOutcome{MarketID: m.marketID, OddHeader: "Over", OddName: "notanumber"}, struct{ Home, Away int }{Home: 20, Away: 15})
// 					t.Logf("Market: %s, Scenario: Non-numeric OddName", m.name)
// 					assert.Error(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_PENDING, status)
// 				})
// 			}
// 		})
// 	}
// }

// // TestBaseballMarkets covers all Baseball market types defined in the domain.
// // For each market (Money Line, Spread, Total Runs), it tests home/away win, draw, void, and invalid input scenarios.
// func TestBaseballMarkets(t *testing.T) {
// 	t.Log("Testing Baseball Markets")
// 	markets := []struct {
// 		marketID int64
// 		name     string
// 	}{
// 		{int64(domain.BASEBALL_MONEY_LINE), "MONEY_LINE"},
// 		{int64(domain.BASEBALL_SPREAD), "SPREAD"},
// 		{int64(domain.BASEBALL_TOTAL_RUNS), "TOTAL_RUNS"},
// 	}

// 	for _, m := range markets {
// 		t.Run(m.name, func(t *testing.T) {
// 			// Each subtest below covers a key scenario for the given Baseball market.
// 			switch m.marketID {
// 			case int64(domain.BASEBALL_MONEY_LINE):
// 				// Home win, away win, draw, and invalid OddHeader for Money Line
// 				t.Run("Home Win", func(t *testing.T) {
// 					status, err := EvaluateBaseballMoneyLine(domain.BetOutcome{MarketID: m.marketID, OddHeader: "1"}, struct{ Home, Away int }{Home: 6, Away: 3})
// 					t.Logf("Market: %s, Scenario: Home Win", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_WIN, status)
// 				})
// 				t.Run("Away Win", func(t *testing.T) {
// 					status, err := EvaluateBaseballMoneyLine(domain.BetOutcome{MarketID: m.marketID, OddHeader: "2"}, struct{ Home, Away int }{Home: 2, Away: 5})
// 					t.Logf("Market: %s, Scenario: Away Win", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_WIN, status)
// 				})
// 				t.Run("Draw", func(t *testing.T) {
// 					status, err := EvaluateBaseballMoneyLine(domain.BetOutcome{MarketID: m.marketID, OddHeader: "1"}, struct{ Home, Away int }{Home: 4, Away: 4})
// 					t.Logf("Market: %s, Scenario: Draw", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_LOSS, status)
// 				})
// 				t.Run("Invalid OddHeader", func(t *testing.T) {
// 					status, err := EvaluateBaseballMoneyLine(domain.BetOutcome{MarketID: m.marketID, OddHeader: "X"}, struct{ Home, Away int }{Home: 10, Away: 7})
// 					t.Logf("Market: %s, Scenario: Invalid OddHeader", m.name)
// 					assert.Error(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_PENDING, status)
// 				})
// 			case int64(domain.BASEBALL_SPREAD):
// 				t.Run("Home Win with Handicap", func(t *testing.T) {
// 					status, err := EvaluateBaseballSpread(domain.BetOutcome{MarketID: m.marketID, OddHeader: "1", OddHandicap: "-1.5"}, struct{ Home, Away int }{Home: 5, Away: 3})
// 					t.Logf("Market: %s, Scenario: Home Win with Handicap", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_WIN, status)
// 				})
// 				t.Run("Away Win with Handicap", func(t *testing.T) {
// 					status, err := EvaluateBaseballSpread(domain.BetOutcome{MarketID: m.marketID, OddHeader: "2", OddHandicap: "+1.5"}, struct{ Home, Away int }{Home: 3, Away: 5})
// 					t.Logf("Market: %s, Scenario: Away Win with Handicap", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_WIN, status)
// 				})
// 				t.Run("Push (Void)", func(t *testing.T) {
// 					status, err := EvaluateBaseballSpread(domain.BetOutcome{MarketID: m.marketID, OddHeader: "1", OddHandicap: "0"}, struct{ Home, Away int }{Home: 4, Away: 4})
// 					t.Logf("Market: %s, Scenario: Push (Void)", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_VOID, status)
// 				})
// 				t.Run("Non-numeric Handicap", func(t *testing.T) {
// 					status, err := EvaluateBaseballSpread(domain.BetOutcome{MarketID: m.marketID, OddHeader: "1", OddHandicap: "notanumber"}, struct{ Home, Away int }{Home: 5, Away: 3})
// 					t.Logf("Market: %s, Scenario: Non-numeric Handicap", m.name)
// 					assert.Error(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_PENDING, status)
// 				})
// 			case int64(domain.BASEBALL_TOTAL_RUNS):
// 				t.Run("Over Win", func(t *testing.T) {
// 					status, err := EvaluateBaseballTotalRuns(domain.BetOutcome{MarketID: m.marketID, OddHeader: "Over", OddName: "7.5"}, struct{ Home, Away int }{Home: 5, Away: 4})
// 					t.Logf("Market: %s, Scenario: Over Win", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_WIN, status)
// 				})
// 				t.Run("Under Win", func(t *testing.T) {
// 					status, err := EvaluateBaseballTotalRuns(domain.BetOutcome{MarketID: m.marketID, OddHeader: "Under", OddName: "7.5"}, struct{ Home, Away int }{Home: 2, Away: 3})
// 					t.Logf("Market: %s, Scenario: Under Win", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_WIN, status)
// 				})
// 				t.Run("Push (Void)", func(t *testing.T) {
// 					status, err := EvaluateBaseballTotalRuns(domain.BetOutcome{MarketID: m.marketID, OddHeader: "Over", OddName: "7"}, struct{ Home, Away int }{Home: 4, Away: 3})
// 					t.Logf("Market: %s, Scenario: Push (Void)", m.name)
// 					assert.NoError(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_VOID, status)
// 				})
// 				t.Run("Non-numeric OddName", func(t *testing.T) {
// 					status, err := EvaluateBaseballTotalRuns(domain.BetOutcome{MarketID: m.marketID, OddHeader: "Over", OddName: "notanumber"}, struct{ Home, Away int }{Home: 4, Away: 3})
// 					t.Logf("Market: %s, Scenario: Non-numeric OddName", m.name)
// 					assert.Error(t, err)
// 					assert.Equal(t, domain.OUTCOME_STATUS_PENDING, status)
// 				})
// 			}
// 		})
// 	}
// }

// func TestEvaluateFootballOutcome(t *testing.T) {
// 	service := &Service{} // or your real logger

// 	// Mock outcome
// 	outcome := domain.BetOutcome{
// 		ID:           1,
// 		BetID:        1,
// 		EventID:      1001,
// 		OddID:        2001,
// 		SportID:      1, // Assuming 1 = Football
// 		HomeTeamName: "Manchester",
// 		AwayTeamName: "Liverpool",
// 		MarketID:     int64(domain.FOOTBALL_FULL_TIME_RESULT),
// 		MarketName:   "Full Time Result",
// 		Odd:          1.75,
// 		OddName:      "2", // Home win
// 		OddHeader:    "1",
// 		OddHandicap:  "",
// 		Status:       domain.OUTCOME_STATUS_PENDING, // Initial status
// 		Expires:      time.Now().Add(24 * time.Hour),
// 	}

// 	// Parsed result (simulate Bet365 JSON)
// 	finalScore := struct{ Home, Away int }{Home: 2, Away: 1}
// 	firstHalfScore := struct{ Home, Away int }{Home: 1, Away: 1}
// 	secondHalfScore := struct{ Home, Away int }{Home: 1, Away: 0}
// 	corners := struct{ Home, Away int }{Home: 5, Away: 3}
// 	halfTimeCorners := struct{ Home, Away int }{Home: 2, Away: 2}
// 	events := []map[string]string{
// 		{"type": "goal", "team": "home", "minute": "23"},
// 		{"type": "goal", "team": "away", "minute": "34"},
// 	}

// 	// Act
// 	status, _ := service.EvaluateFootballOutcome(outcome, finalScore, firstHalfScore, secondHalfScore, corners, halfTimeCorners, events)

// 	fmt.Printf("\n\nBet Outcome: %v\n\n", &status)

// }
// func TestEvaluateTotalLegs(t *testing.T) {
// 	tests := []struct {
// 		name     string
// 		outcome  domain.BetOutcome
// 		score    struct{ Home, Away int }
// 		expected domain.OutcomeStatus
// 	}{
// 		{"OverTotalLegs", domain.BetOutcome{OddName: "3", OddHeader: "Over"}, struct{ Home, Away int }{2, 4}, domain.OUTCOME_STATUS_WIN},
// 		{"OverTotalLegs", domain.BetOutcome{OddName: "3", OddHeader: "Under"}, struct{ Home, Away int }{2, 4}, domain.OUTCOME_STATUS_LOSS},
// 		{"UnderTotalLegs", domain.BetOutcome{OddName: "7", OddHeader: "Under"}, struct{ Home, Away int }{2, 3}, domain.OUTCOME_STATUS_WIN},
// 	}

// 	for _, tt := range tests {
// 		t.Run(tt.name, func(t *testing.T) {
// 			status, _ := EvaluateTotalLegs(tt.outcome, tt.score)
// 			if status != tt.expected {
// 				t.Errorf("expected %d, got %d", tt.expected, status)
// 			}
// 		})
// 	}
// }

// func TestEvaluateGameLines(t *testing.T) {
// 	tests := []struct {
// 		name     string
// 		outcome  domain.BetOutcome
// 		score    struct{ Home, Away int }
// 		expected domain.OutcomeStatus
// 	}{
// 		{"GameLines - Total", domain.BetOutcome{OddName: "Total", OddHandicap: "O 5.5"}, struct{ Home, Away int }{2, 4}, domain.OUTCOME_STATUS_WIN},
// 		{"GameLines - Total", domain.BetOutcome{OddName: "Total", OddHandicap: "O 5.5"}, struct{ Home, Away int }{2, 3}, domain.OUTCOME_STATUS_LOSS},
// 		{"GameLines - Money Line", domain.BetOutcome{OddName: "Money Line", OddHeader: "1"}, struct{ Home, Away int }{2, 3}, domain.OUTCOME_STATUS_LOSS},
// 		{"GameLines - Money Line", domain.BetOutcome{OddName: "Money Line", OddHeader: "1"}, struct{ Home, Away int }{3, 2}, domain.OUTCOME_STATUS_WIN},
// 	}

// 	for _, tt := range tests {
// 		t.Run(tt.name, func(t *testing.T) {
// 			status, _ := EvaluateGameLines(tt.outcome, tt.score)
// 			if status != tt.expected {
// 				t.Errorf("expected %d, got %d", tt.expected, status)
// 			}
// 		})
// 	}
// }

// func TestEvaluateFirstTeamToScore(t *testing.T) {
// 	tests := []struct {
// 		name     string
// 		outcome  domain.BetOutcome
// 		events   []map[string]string
// 		expected domain.OutcomeStatus
// 	}{
// 		{"HomeScoreFirst", domain.BetOutcome{OddName: "1", HomeTeamName: "Team A", AwayTeamName: "Team B"}, []map[string]string{
// 			{"text": "1st Goal - Team A"},
// 		}, domain.OUTCOME_STATUS_WIN},
// 		{"AwayScoreFirst", domain.BetOutcome{OddName: "2", HomeTeamName: "Team A", AwayTeamName: "Team B"}, []map[string]string{
// 			{"text": "1st Goal - Team A"},
// 		}, domain.OUTCOME_STATUS_LOSS},
// 		{"AwayScoreFirst", domain.BetOutcome{OddName: "2", HomeTeamName: "Team A", AwayTeamName: "Team B"}, []map[string]string{
// 			{"text": "1st Goal - Team B"},
// 		}, domain.OUTCOME_STATUS_WIN},
// 	}

// 	for _, tt := range tests {
// 		t.Run(tt.name, func(t *testing.T) {
// 			status, _ := EvaluateFirstTeamToScore(tt.outcome, tt.events)
// 			if status != tt.expected {
// 				t.Errorf("expected %d, got %d", tt.expected, status)
// 			}
// 		})
// 	}
// }

// func TestEvaluateGoalsOverUnder(t *testing.T) {
// 	tests := []struct {
// 		name     string
// 		outcome  domain.BetOutcome
// 		score    struct{ Home, Away int }
// 		expected domain.OutcomeStatus
// 	}{
// 		{"LosingGoalsOver", domain.BetOutcome{OddHeader: "Over", OddName: "13"}, struct{ Home, Away int }{7, 5}, domain.OUTCOME_STATUS_LOSS},
// 		{"WinningGoalsOver", domain.BetOutcome{OddHeader: "Over", OddName: "11"}, struct{ Home, Away int }{7, 5}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningGoalsUnder", domain.BetOutcome{OddHeader: "Under", OddName: "12"}, struct{ Home, Away int }{6, 5}, domain.OUTCOME_STATUS_WIN},
// 	}

// 	for _, tt := range tests {
// 		t.Run(tt.name, func(t *testing.T) {
// 			status, _ := EvaluateGoalsOverUnder(tt.outcome, tt.score)
// 			if status != tt.expected {
// 				t.Errorf("expected %d, got %d", tt.expected, status)
// 			}
// 		})
// 	}
// }

// func TestEvaluateGoalsOddEven(t *testing.T) {
// 	tests := []struct {
// 		name     string
// 		outcome  domain.BetOutcome
// 		score    struct{ Home, Away int }
// 		expected domain.OutcomeStatus
// 	}{
// 		{"WinningOddGoals", domain.BetOutcome{OddName: "Odd"}, struct{ Home, Away int }{7, 4}, domain.OUTCOME_STATUS_WIN},
// 		{"LosingEvenGoals", domain.BetOutcome{OddName: "Even"}, struct{ Home, Away int }{7, 4}, domain.OUTCOME_STATUS_LOSS},
// 		{"WinningEvenGoals", domain.BetOutcome{OddName: "Even"}, struct{ Home, Away int }{6, 6}, domain.OUTCOME_STATUS_WIN},
// 	}

// 	for _, tt := range tests {
// 		t.Run(tt.name, func(t *testing.T) {
// 			status, _ := EvaluateGoalsOddEven(tt.outcome, tt.score)
// 			if status != tt.expected {
// 				t.Errorf("expected %d, got %d", tt.expected, status)
// 			}
// 		})
// 	}
// }

// func TestEvaluateCorrectScore(t *testing.T) {
// 	tests := []struct {
// 		name     string
// 		outcome  domain.BetOutcome
// 		score    struct{ Home, Away int }
// 		expected domain.OutcomeStatus
// 	}{
// 		{"CorrectScore", domain.BetOutcome{OddName: "7-4"}, struct{ Home, Away int }{7, 4}, domain.OUTCOME_STATUS_WIN},
// 		{"CorrectScore", domain.BetOutcome{OddName: "6-6"}, struct{ Home, Away int }{6, 6}, domain.OUTCOME_STATUS_WIN},
// 		{"IncorrectScore", domain.BetOutcome{OddName: "2-3"}, struct{ Home, Away int }{7, 4}, domain.OUTCOME_STATUS_LOSS},
// 	}

// 	for _, tt := range tests {
// 		t.Run(tt.name, func(t *testing.T) {
// 			status, _ := EvaluateCorrectScore(tt.outcome, tt.score)
// 			if status != tt.expected {
// 				t.Errorf("expected %d, got %d", tt.expected, status)
// 			}
// 		})
// 	}
// }

// func TestEvaluateHighestScoringHalf(t *testing.T) {
// 	tests := []struct {
// 		name        string
// 		outcome     domain.BetOutcome
// 		firstScore  struct{ Home, Away int }
// 		secondScore struct{ Home, Away int }
// 		expected    domain.OutcomeStatus
// 	}{
// 		{"Winning1stHalf", domain.BetOutcome{OddName: "1st Half"}, struct{ Home, Away int }{1, 1}, struct{ Home, Away int }{0, 0}, domain.OUTCOME_STATUS_WIN},
// 		{"Losing1stHalf", domain.BetOutcome{OddName: "1st Half"}, struct{ Home, Away int }{1, 1}, struct{ Home, Away int }{2, 2}, domain.OUTCOME_STATUS_LOSS},
// 		{"Losing2ndHalf", domain.BetOutcome{OddName: "2nd Half"}, struct{ Home, Away int }{0, 0}, struct{ Home, Away int }{0, 0}, domain.OUTCOME_STATUS_LOSS},
// 		{"Winning2ndHalf", domain.BetOutcome{OddName: "2nd Half"}, struct{ Home, Away int }{1, 1}, struct{ Home, Away int }{2, 2}, domain.OUTCOME_STATUS_WIN},
// 	}

// 	for _, tt := range tests {
// 		t.Run(tt.name, func(t *testing.T) {
// 			status, _ := EvaluateHighestScoringHalf(tt.outcome, tt.firstScore, tt.secondScore)
// 			if status != tt.expected {
// 				t.Errorf("expected %d, got %d", tt.expected, status)
// 			}
// 		})
// 	}

// }

// func TestEvaluateHighestScoringQuarter(t *testing.T) {
// 	tests := []struct {
// 		name        string
// 		outcome     domain.BetOutcome
// 		firstScore  struct{ Home, Away int }
// 		secondScore struct{ Home, Away int }
// 		thirdScore  struct{ Home, Away int }
// 		fourthScore struct{ Home, Away int }
// 		expected    domain.OutcomeStatus
// 	}{
// 		{"Winning1stQuarter", domain.BetOutcome{OddName: "1st Quarter"},
// 			struct{ Home, Away int }{1, 1},
// 			struct{ Home, Away int }{0, 0},
// 			struct{ Home, Away int }{1, 0},
// 			struct{ Home, Away int }{0, 0},
// 			domain.OUTCOME_STATUS_WIN},
// 		{"Losing1stQuarter", domain.BetOutcome{OddName: "1st Quarter"},
// 			struct{ Home, Away int }{1, 1},
// 			struct{ Home, Away int }{0, 0},
// 			struct{ Home, Away int }{1, 1},
// 			struct{ Home, Away int }{0, 0},
// 			domain.OUTCOME_STATUS_LOSS},
// 		{"Losing2ndQuarter", domain.BetOutcome{OddName: "2nd Quarter"},
// 			struct{ Home, Away int }{1, 1},
// 			struct{ Home, Away int }{0, 0},
// 			struct{ Home, Away int }{1, 1},
// 			struct{ Home, Away int }{0, 0},
// 			domain.OUTCOME_STATUS_LOSS},
// 		{"Winning3rdQuarter", domain.BetOutcome{OddName: "3rd Quarter"},
// 			struct{ Home, Away int }{1, 0},
// 			struct{ Home, Away int }{0, 0},
// 			struct{ Home, Away int }{1, 1},
// 			struct{ Home, Away int }{0, 0},
// 			domain.OUTCOME_STATUS_WIN},
// 		{"Wining4thQuarter", domain.BetOutcome{OddName: "4th Quarter"},
// 			struct{ Home, Away int }{1, 1},
// 			struct{ Home, Away int }{0, 0},
// 			struct{ Home, Away int }{1, 1},
// 			struct{ Home, Away int }{2, 2},
// 			domain.OUTCOME_STATUS_WIN},
// 	}

// 	for _, tt := range tests {
// 		t.Run(tt.name, func(t *testing.T) {
// 			status, _ := EvaluateHighestScoringQuarter(tt.outcome, tt.firstScore, tt.secondScore, tt.thirdScore, tt.fourthScore)
// 			if status != tt.expected {
// 				t.Errorf("expected %d, got %d", tt.expected, status)
// 			}
// 		})
// 	}

// }

// func TestEvaluateWinningMargin(t *testing.T) {
// 	tests := []struct {
// 		name     string
// 		outcome  domain.BetOutcome
// 		score    struct{ Home, Away int }
// 		expected domain.OutcomeStatus
// 	}{
// 		{"WinningMargin", domain.BetOutcome{OddHeader: "1", OddName: "12"}, struct{ Home, Away int }{12, 0}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningMargin", domain.BetOutcome{OddHeader: "2", OddName: "3"}, struct{ Home, Away int }{1, 4}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningMargin", domain.BetOutcome{OddHeader: "1", OddName: "3+"}, struct{ Home, Away int }{4, 0}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningMargin", domain.BetOutcome{OddHeader: "2", OddName: "12+"}, struct{ Home, Away int }{0, 13}, domain.OUTCOME_STATUS_WIN},
// 		{"LosingMargin", domain.BetOutcome{OddHeader: "2", OddName: "3"}, struct{ Home, Away int }{0, 4}, domain.OUTCOME_STATUS_LOSS},
// 		{"LosingMargin", domain.BetOutcome{OddHeader: "2", OddName: "3+"}, struct{ Home, Away int }{1, 3}, domain.OUTCOME_STATUS_LOSS},
// 	}

// 	for _, tt := range tests {
// 		t.Run(tt.name, func(t *testing.T) {
// 			status, _ := EvaluateWinningMargin(tt.outcome, tt.score)
// 			if status != tt.expected {
// 				t.Errorf("expected %d, got %d", tt.expected, status)
// 			}
// 		})
// 	}
// }

// func TestEvaluateDoubleResult(t *testing.T) {
// 	tests := []struct {
// 		name           string
// 		outcome        domain.BetOutcome
// 		firstHalfScore struct{ Home, Away int }
// 		fullTimeScore  struct{ Home, Away int }
// 		expected       domain.OutcomeStatus
// 	}{
// 		{"WinningHomeAway", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "Team A - Team B"}, struct{ Home, Away int }{1, 0}, struct{ Home, Away int }{1, 2}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningAwayHome", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "Team B - Team A"}, struct{ Home, Away int }{0, 1}, struct{ Home, Away int }{2, 1}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningTie", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "Tie - Tie"}, struct{ Home, Away int }{1, 1}, struct{ Home, Away int }{2, 2}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningTieAway", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "Tie - Team B"}, struct{ Home, Away int }{1, 1}, struct{ Home, Away int }{1, 2}, domain.OUTCOME_STATUS_WIN},
// 		{"LosingHomeAway", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "Team A - Team B"}, struct{ Home, Away int }{1, 0}, struct{ Home, Away int }{2, 0}, domain.OUTCOME_STATUS_LOSS},
// 		{"LosingTie", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "Tie - Tie"}, struct{ Home, Away int }{1, 0}, struct{ Home, Away int }{1, 1}, domain.OUTCOME_STATUS_LOSS},
// 		{"LosingTieAway", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "Tie - Team A"}, struct{ Home, Away int }{1, 1}, struct{ Home, Away int }{1, 2}, domain.OUTCOME_STATUS_LOSS},
// 		{"BadInput", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "Team A - "}, struct{ Home, Away int }{1, 1}, struct{ Home, Away int }{1, 2}, domain.OUTCOME_STATUS_PENDING},
// 	}

// 	for _, tt := range tests {
// 		t.Run(tt.name, func(t *testing.T) {
// 			status, _ := EvaluateDoubleResult(tt.outcome, tt.firstHalfScore, tt.fullTimeScore)
// 			if status != tt.expected {
// 				t.Errorf("expected %d, got %d", tt.expected, status)
// 			}
// 		})
// 	}
// }

// func TestEvaluateHighestScoringPeriod(t *testing.T) {
// 	tests := []struct {
// 		name        string
// 		outcome     domain.BetOutcome
// 		firstScore  struct{ Home, Away int }
// 		secondScore struct{ Home, Away int }
// 		thirdScore  struct{ Home, Away int }
// 		expected    domain.OutcomeStatus
// 	}{
// 		{"Winning1stPeriod", domain.BetOutcome{OddName: "Period 1"}, struct{ Home, Away int }{2, 2}, struct{ Home, Away int }{1, 1}, struct{ Home, Away int }{0, 0}, domain.OUTCOME_STATUS_WIN},
// 		{"Winning2ndPeriod", domain.BetOutcome{OddName: "Period 2"}, struct{ Home, Away int }{2, 2}, struct{ Home, Away int }{2, 3}, struct{ Home, Away int }{0, 0}, domain.OUTCOME_STATUS_WIN},
// 		{"Winning3rdPeriod", domain.BetOutcome{OddName: "Period 3"}, struct{ Home, Away int }{2, 2}, struct{ Home, Away int }{2, 3}, struct{ Home, Away int }{3, 3}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningTie", domain.BetOutcome{OddName: "Tie"}, struct{ Home, Away int }{2, 2}, struct{ Home, Away int }{2, 2}, struct{ Home, Away int }{0, 0}, domain.OUTCOME_STATUS_WIN},
// 		{"Losing1stPeriod", domain.BetOutcome{OddName: "Period 1"}, struct{ Home, Away int }{2, 2}, struct{ Home, Away int }{2, 3}, struct{ Home, Away int }{0, 0}, domain.OUTCOME_STATUS_LOSS},
// 		{"Losing3rdPeriod", domain.BetOutcome{OddName: "Period 3"}, struct{ Home, Away int }{2, 2}, struct{ Home, Away int }{2, 3}, struct{ Home, Away int }{0, 0}, domain.OUTCOME_STATUS_LOSS},
// 	}

// 	for _, tt := range tests {
// 		t.Run(tt.name, func(t *testing.T) {
// 			status, _ := EvaluateHighestScoringPeriod(tt.outcome, tt.firstScore, tt.secondScore, tt.thirdScore)
// 			if status != tt.expected {
// 				t.Errorf("expected %d, got %d", tt.expected, status)
// 			}
// 		})
// 	}
// }

// func TestEvalauteTiedAfterRegulation(t *testing.T) {
// 	tests := []struct {
// 		name     string
// 		outcome  domain.BetOutcome
// 		score    []struct{ Home, Away int }
// 		expected domain.OutcomeStatus
// 	}{
// 		{"WinningTied", domain.BetOutcome{OddName: "Yes"}, []struct{ Home, Away int }{{1, 0}, {0, 1}, {2, 2}}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningTied", domain.BetOutcome{OddName: "Yes"}, []struct{ Home, Away int }{{1, 1}, {0, 1}, {2, 2}, {2, 1}}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningNotTied", domain.BetOutcome{OddName: "No"}, []struct{ Home, Away int }{{0, 0}, {0, 0}, {0, 0}, {1, 0}}, domain.OUTCOME_STATUS_WIN},
// 		{"LosingTied", domain.BetOutcome{OddName: "Yes"}, []struct{ Home, Away int }{{0, 2}, {0, 0}, {0, 0}, {0, 0}}, domain.OUTCOME_STATUS_LOSS},
// 		{"LosingNotTied", domain.BetOutcome{OddName: "No"}, []struct{ Home, Away int }{{0, 0}, {0, 0}, {0, 0}, {0, 0}}, domain.OUTCOME_STATUS_LOSS},
// 	}

// 	for _, tt := range tests {
// 		t.Run(tt.name, func(t *testing.T) {
// 			status, _ := EvaluateTiedAfterRegulation(tt.outcome, tt.score)
// 			if status != tt.expected {
// 				t.Errorf("expected %d, got %d", tt.expected, status)
// 			}
// 		})
// 	}
// }

// func TestEvaluateTeamTotal(t *testing.T) {
// 	tests := []struct {
// 		name     string
// 		outcome  domain.BetOutcome
// 		score    struct{ Home, Away int }
// 		expected domain.OutcomeStatus
// 	}{
// 		{"WinningHomeUnder", domain.BetOutcome{OddHandicap: "Under 3", OddHeader: "1"}, struct{ Home, Away int }{2, 0}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningHomeOver", domain.BetOutcome{OddHandicap: "Over 2", OddHeader: "1"}, struct{ Home, Away int }{3, 1}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningAwayOver", domain.BetOutcome{OddHandicap: "Over 2", OddHeader: "2"}, struct{ Home, Away int }{1, 3}, domain.OUTCOME_STATUS_WIN},
// 		{"LosingHomeOver", domain.BetOutcome{OddHandicap: "Over 2", OddHeader: "1"}, struct{ Home, Away int }{1, 2}, domain.OUTCOME_STATUS_LOSS},
// 		{"LosingAwayOver", domain.BetOutcome{OddHandicap: "Over 2", OddHeader: "2"}, struct{ Home, Away int }{1, 2}, domain.OUTCOME_STATUS_LOSS},
// 	}

// 	for _, tt := range tests {
// 		t.Run(tt.name, func(t *testing.T) {
// 			status, _ := EvaluateTeamTotal(tt.outcome, tt.score)
// 			if status != tt.expected {
// 				t.Errorf("expected %d, got %d", tt.expected, status)
// 			}
// 		})
// 	}
// }

// func TestDrawNoBet(t *testing.T) {
// 	tests := []struct {
// 		name     string
// 		outcome  domain.BetOutcome
// 		score    struct{ Home, Away int }
// 		expected domain.OutcomeStatus
// 	}{
// 		{"WinningHome", domain.BetOutcome{OddName: "1"}, struct{ Home, Away int }{1, 0}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningAway", domain.BetOutcome{OddName: "2"}, struct{ Home, Away int }{1, 2}, domain.OUTCOME_STATUS_WIN},
// 		{"LosingHome", domain.BetOutcome{OddName: "1"}, struct{ Home, Away int }{1, 2}, domain.OUTCOME_STATUS_LOSS},
// 		{"Tie", domain.BetOutcome{OddName: "1"}, struct{ Home, Away int }{1, 1}, domain.OUTCOME_STATUS_VOID},
// 	}

// 	for _, tt := range tests {
// 		t.Run(tt.name, func(t *testing.T) {
// 			status, _ := EvaluateDrawNoBet(tt.outcome, tt.score)
// 			if status != tt.expected {
// 				t.Errorf("expected %d, got %d", tt.expected, status)
// 			}
// 		})
// 	}
// }

// func TestEvaluateMoneyLine(t *testing.T) {
// 	tests := []struct {
// 		name     string
// 		outcome  domain.BetOutcome
// 		score    struct{ Home, Away int }
// 		expected domain.OutcomeStatus
// 	}{
// 		{"WinningHome", domain.BetOutcome{OddHeader: "1"}, struct{ Home, Away int }{1, 0}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningAway", domain.BetOutcome{OddHeader: "2"}, struct{ Home, Away int }{1, 2}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningTie", domain.BetOutcome{OddHeader: "Tie"}, struct{ Home, Away int }{2, 2}, domain.OUTCOME_STATUS_WIN},
// 		{"LosingTie", domain.BetOutcome{OddHeader: "1"}, struct{ Home, Away int }{1, 2}, domain.OUTCOME_STATUS_LOSS},
// 		{"LosingAway", domain.BetOutcome{OddHeader: "2"}, struct{ Home, Away int }{3, 2}, domain.OUTCOME_STATUS_LOSS},
// 	}

// 	for _, tt := range tests {
// 		t.Run(tt.name, func(t *testing.T) {
// 			status, _ := EvaluateMoneyLine(tt.outcome, tt.score)
// 			if status != tt.expected {
// 				t.Errorf("expected %d, got %d", tt.expected, status)
// 			}
// 		})
// 	}
// }

// func TestEvaluateDoubleChance(t *testing.T) {
// 	tests := []struct {
// 		name     string
// 		outcome  domain.BetOutcome
// 		score    struct{ Home, Away int }
// 		expected domain.OutcomeStatus
// 	}{
// 		{"WinningHomeOrDraw", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "1 or Draw"}, struct{ Home, Away int }{1, 0}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningHomeOrDraw", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "Team A or Draw"}, struct{ Home, Away int }{1, 0}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningAwayOrDraw", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "Draw or Team B"}, struct{ Home, Away int }{0, 1}, domain.OUTCOME_STATUS_WIN},
// 		{"LosingHomeorAway", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "1 or 2"}, struct{ Home, Away int }{1, 1}, domain.OUTCOME_STATUS_LOSS},
// 		{"LosingAwayOrDraw", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "Draw or 2"}, struct{ Home, Away int }{2, 1}, domain.OUTCOME_STATUS_LOSS},
// 	}

// 	for _, tt := range tests {
// 		t.Run(tt.name, func(t *testing.T) {
// 			status, _ := EvaluateDoubleChance(tt.outcome, tt.score)
// 			if status != tt.expected {
// 				t.Errorf("expected %d, got %d", tt.expected, status)
// 			}
// 		})
// 	}
// }

// func TestEvaluateResultAndTotal(t *testing.T) {
// 	tests := []struct {
// 		name     string
// 		outcome  domain.BetOutcome
// 		score    struct{ Home, Away int }
// 		expected domain.OutcomeStatus
// 	}{
// 		{"WinningHomeOver", domain.BetOutcome{OddHeader: "1", OddHandicap: "Over 4"}, struct{ Home, Away int }{3, 2}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningHomeUnder", domain.BetOutcome{OddHeader: "1", OddHandicap: "Under 4"}, struct{ Home, Away int }{2, 1}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningAwayUnder", domain.BetOutcome{OddHeader: "2", OddHandicap: "Under 4"}, struct{ Home, Away int }{1, 2}, domain.OUTCOME_STATUS_WIN},
// 		{"LosingHomeOver", domain.BetOutcome{OddHeader: "1", OddHandicap: "Under 4"}, struct{ Home, Away int }{3, 2}, domain.OUTCOME_STATUS_LOSS},
// 		{"LosingAwayUnder", domain.BetOutcome{OddHeader: "2", OddHandicap: "Under 4"}, struct{ Home, Away int }{2, 2}, domain.OUTCOME_STATUS_LOSS},
// 	}

// 	for _, tt := range tests {
// 		t.Run(tt.name, func(t *testing.T) {
// 			status, _ := EvaluateResultAndTotal(tt.outcome, tt.score)
// 			if status != tt.expected {
// 				t.Errorf("expected %d, got %d", tt.expected, status)
// 			}
// 		})
// 	}
// }

// func TestCheckMultiOutcome(t *testing.T) {
// 	tests := []struct {
// 		name          string
// 		outcome       domain.OutcomeStatus
// 		secondOutcome domain.OutcomeStatus
// 		expected      domain.OutcomeStatus
// 	}{
// 		{"Win-Win", domain.OUTCOME_STATUS_WIN, domain.OUTCOME_STATUS_WIN, domain.OUTCOME_STATUS_WIN},
// 		{"Win-Void", domain.OUTCOME_STATUS_WIN, domain.OUTCOME_STATUS_VOID, domain.OUTCOME_STATUS_HALF},
// 		{"Win-Loss", domain.OUTCOME_STATUS_WIN, domain.OUTCOME_STATUS_LOSS, domain.OUTCOME_STATUS_LOSS},
// 		{"Loss-Loss", domain.OUTCOME_STATUS_LOSS, domain.OUTCOME_STATUS_LOSS, domain.OUTCOME_STATUS_LOSS},
// 		{"Loss-Void", domain.OUTCOME_STATUS_LOSS, domain.OUTCOME_STATUS_VOID, domain.OUTCOME_STATUS_VOID},
// 		{"Loss-Win", domain.OUTCOME_STATUS_LOSS, domain.OUTCOME_STATUS_WIN, domain.OUTCOME_STATUS_LOSS},
// 		{"Void-Win", domain.OUTCOME_STATUS_VOID, domain.OUTCOME_STATUS_WIN, domain.OUTCOME_STATUS_VOID},
// 		{"Void-Loss", domain.OUTCOME_STATUS_VOID, domain.OUTCOME_STATUS_LOSS, domain.OUTCOME_STATUS_VOID},
// 		{"Void-Void", domain.OUTCOME_STATUS_VOID, domain.OUTCOME_STATUS_VOID, domain.OUTCOME_STATUS_VOID},
// 	}

// 	for _, tt := range tests {
// 		t.Run(tt.name, func(t *testing.T) {
// 			status, _ := checkMultiOutcome(tt.outcome, tt.secondOutcome)
// 			if status != tt.expected {
// 				t.Errorf("expected %d, got %d", tt.expected, status)
// 			}
// 		})
// 	}
// }

// func TestEvaluateBTTSX(t *testing.T) {
// 	tests := []struct {
// 		name     string
// 		outcome  domain.BetOutcome
// 		score    struct{ Home, Away int }
// 		expected domain.OutcomeStatus
// 	}{
// 		{"WinningBothScoreX", domain.BetOutcome{OddName: "3", OddHeader: "Yes"}, struct{ Home, Away int }{3, 4}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningBothScoreLess", domain.BetOutcome{OddName: "3", OddHeader: "No"}, struct{ Home, Away int }{2, 1}, domain.OUTCOME_STATUS_WIN},
// 		{"LosingBothScoreX", domain.BetOutcome{OddName: "3", OddHeader: "Yes"}, struct{ Home, Away int }{2, 4}, domain.OUTCOME_STATUS_LOSS},
// 		{"LosingBothScoreLess", domain.BetOutcome{OddName: "3", OddHeader: "No"}, struct{ Home, Away int }{2, 4}, domain.OUTCOME_STATUS_LOSS},
// 	}

// 	for _, tt := range tests {
// 		t.Run(tt.name, func(t *testing.T) {
// 			status, _ := EvaluateBTTSX(tt.outcome, tt.score)
// 			if status != tt.expected {
// 				t.Errorf("expected %d, got %d", tt.expected, status)
// 			}
// 		})
// 	}
// }

// func TestEvaluateResultAndBTTSX(t *testing.T) {
// 	tests := []struct {
// 		name     string
// 		outcome  domain.BetOutcome
// 		score    struct{ Home, Away int }
// 		expected domain.OutcomeStatus
// 	}{
// 		{"WinningHomeAndBothScoreX", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "Team A and Yes", OddHeader: "3"}, struct{ Home, Away int }{4, 3}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningHomeAndBothScoreLess", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "Team A and No", OddHeader: "3"}, struct{ Home, Away int }{2, 1}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningAwayAndBothScoreX", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "Team B and Yes", OddHeader: "3"}, struct{ Home, Away int }{3, 4}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningAwayAndBothScoreLess", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "Team B and No", OddHeader: "3"}, struct{ Home, Away int }{1, 2}, domain.OUTCOME_STATUS_WIN},
// 		{"LosingHomeAndBothScoreX", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "Team A and Yes", OddHeader: "3"}, struct{ Home, Away int }{3, 4}, domain.OUTCOME_STATUS_LOSS},
// 		{"LosingHomeAndBothScoreX", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "Team B and Yes", OddHeader: "3"}, struct{ Home, Away int }{4, 2}, domain.OUTCOME_STATUS_LOSS},
// 		{"LosingAwayAndBothScoreX", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "Team B and Yes", OddHeader: "3"}, struct{ Home, Away int }{2, 4}, domain.OUTCOME_STATUS_LOSS},
// 	}

// 	for _, tt := range tests {
// 		t.Run(tt.name, func(t *testing.T) {
// 			status, _ := EvaluateResultAndBTTSX(tt.outcome, tt.score)
// 			if status != tt.expected {
// 				t.Errorf("expected %d, got %d", tt.expected, status)
// 			}
// 		})
// 	}
// }

// func TestEvaluateMoneyLine3Way(t *testing.T) {
// 	tests := []struct {
// 		name     string
// 		outcome  domain.BetOutcome
// 		score    struct{ Home, Away int }
// 		expected domain.OutcomeStatus
// 	}{
// 		{"WinningHome", domain.BetOutcome{OddName: "1"}, struct{ Home, Away int }{1, 0}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningAway", domain.BetOutcome{OddName: "2"}, struct{ Home, Away int }{1, 2}, domain.OUTCOME_STATUS_WIN},
// 		{"WinningTie", domain.BetOutcome{OddName: "Tie"}, struct{ Home, Away int }{2, 2}, domain.OUTCOME_STATUS_WIN},
// 		{"LosingTie", domain.BetOutcome{OddName: "1"}, struct{ Home, Away int }{1, 2}, domain.OUTCOME_STATUS_LOSS},
// 		{"LosingAway", domain.BetOutcome{OddName: "2"}, struct{ Home, Away int }{3, 2}, domain.OUTCOME_STATUS_LOSS},
// 	}

// 	for _, tt := range tests {
// 		t.Run(tt.name, func(t *testing.T) {
// 			status, _ := EvaluateMoneyLine3Way(tt.outcome, tt.score)
// 			if status != tt.expected {
// 				t.Errorf("expected %d, got %d", tt.expected, status)
// 			}
// 		})
// 	}
// }

// func TestEvaluateAsianHandicap(t *testing.T) {
// 	tests := []struct {
// 		name     string
// 		outcome  domain.BetOutcome
// 		score    struct{ Home, Away int }
// 		expected domain.OutcomeStatus
// 	}{
// 		{
// 			name:     "Home -1 Win",
// 			outcome:  domain.BetOutcome{OddHeader: "1", OddHandicap: "-1"},
// 			score:    struct{ Home, Away int }{Home: 2, Away: 0},
// 			expected: domain.OUTCOME_STATUS_WIN,
// 		},
// 		{
// 			name:     "Home -0.5 Win",
// 			outcome:  domain.BetOutcome{OddHeader: "1", OddHandicap: "-0.5"},
// 			score:    struct{ Home, Away int }{Home: 1, Away: 0},
// 			expected: domain.OUTCOME_STATUS_WIN,
// 		},
// 		{
// 			name:     "Home -1 Void",
// 			outcome:  domain.BetOutcome{OddHeader: "1", OddHandicap: "-1"},
// 			score:    struct{ Home, Away int }{Home: 1, Away: 0},
// 			expected: domain.OUTCOME_STATUS_VOID,
// 		},
// 		{
// 			name:     "Away +3 Win",
// 			outcome:  domain.BetOutcome{OddHeader: "2", OddHandicap: "3"},
// 			score:    struct{ Home, Away int }{Home: 1, Away: 2},
// 			expected: domain.OUTCOME_STATUS_WIN,
// 		},
// 		{
// 			name:     "Split Handicap Home -0.5,-1 Win/Win",
// 			outcome:  domain.BetOutcome{OddHeader: "1", OddHandicap: "-0.5,-1"},
// 			score:    struct{ Home, Away int }{Home: 2, Away: 0},
// 			expected: domain.OUTCOME_STATUS_WIN,
// 		},
// 		{
// 			name:     "Split Handicap Home -0.5,-1 Win/Void",
// 			outcome:  domain.BetOutcome{OddHeader: "1", OddHandicap: "-0.5,-1"},
// 			score:    struct{ Home, Away int }{Home: 1, Away: 0},
// 			expected: domain.OUTCOME_STATUS_WIN,
// 		},
// 		{
// 			name:     "Invalid Handicap",
// 			outcome:  domain.BetOutcome{OddHeader: "1", OddHandicap: "invalid"},
// 			score:    struct{ Home, Away int }{Home: 1, Away: 0},
// 			expected: domain.OUTCOME_STATUS_ERROR,
// 		},
// 	}

// 	for _, tt := range tests {
// 		t.Run(tt.name, func(t *testing.T) {
// 			status, _ := EvaluateAsianHandicap(tt.outcome, tt.score)
// 			if status != tt.expected {
// 				t.Errorf("expected %d, got %d", tt.expected, status)
// 			}
// 		})
// 	}
// }

// func TestEvaluateHandicapAndTotal(t *testing.T) {
// 	tests := []struct {
// 		name     string
// 		outcome  domain.BetOutcome
// 		score    struct{ Home, Away int }
// 		expected domain.OutcomeStatus
// 	}{
// 		{"Home +2.5 Over 3", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "Team A +2.5 & Over 3"},
// 			struct{ Home, Away int }{4, 0},
// 			domain.OUTCOME_STATUS_WIN},
// 		{"Away +2.5 Over 4", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "Team B +2.5 & Over 4"},
// 			struct{ Home, Away int }{1, 5},
// 			domain.OUTCOME_STATUS_WIN},
// 		{"Home +2.5 Over 3", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "Team A +2.5 & Over 3"},
// 			struct{ Home, Away int }{2, 0},
// 			domain.OUTCOME_STATUS_LOSS},
// 		{"Home -3.5 Over 3", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "Team A -2.5 & Over 3"},
// 			struct{ Home, Away int }{4, 3},
// 			domain.OUTCOME_STATUS_LOSS},
// 		{"Away -3 Over 4", domain.BetOutcome{HomeTeamName: "Team A", AwayTeamName: "Team B", OddName: "Team B -3 & Over 4"},
// 			struct{ Home, Away int }{3, 5},
// 			domain.OUTCOME_STATUS_LOSS},
// 	}

// 	for _, tt := range tests {
// 		t.Run(tt.name, func(t *testing.T) {
// 			status, _ := EvaluateHandicapAndTotal(tt.outcome, tt.score)
// 			if status != tt.expected {
// 				t.Errorf("expected %d, got %d", tt.expected, status)
// 			}
// 		})
// 	}
// }
