package domain

import (
	"fmt"
	"time"

	"go.uber.org/zap"
)

var MongoDBLogger *zap.Logger

type ValidInt64 struct {
	Value int64
	Valid bool
}
type ValidInt struct {
	Value int
	Valid bool
}
type ValidInt32 struct {
	Value int32
	Valid bool
}

type ValidString struct {
	Value string
	Valid bool
}
type ValidTime struct {
	Value time.Time
	Valid bool
}
type ValidBool struct {
	Value bool
	Valid bool
}

type Currency int64

// ToCurrency converts a float32 to Currency
func ToCurrency(f float32) Currency {
	return Currency((f * 100) + 0.5)
}

// Float32 converts a Currency to float32
func (m Currency) Float32() float32 {
	x := float32(m)
	x = x / 100
	return x
}

// String returns a formatted Currency value
func (m Currency) String() string {
	x := float32(m)
	x = x / 100
	return fmt.Sprintf("$%.2f", x)
}

type ResponseWDataFactory[T any] struct {
	Data T `json:"data"`
	Response
}

type Response struct {
	Message    string      `json:"message"`
	Data       interface{} `json:"data,omitempty"`
	Success    bool        `json:"success"`
	StatusCode int         `json:"status_code"`
}

func CalculateWinnings(amount Currency, totalOdds float32) Currency {

	vat := amount.Float32() * 0.15
	stakeAfterVat := amount.Float32() - vat
	possibleWin := stakeAfterVat * totalOdds
	incomeTax := possibleWin * 0.15

	return ToCurrency(possibleWin - incomeTax)

}
