package config

import (
	"os"
	"strconv"
	"time"
)

type Config struct {
	EthereumRPCURL          string
	GenexRPCURL             string
	AxelarGatewayAddress    string
	GenexBridgeTokenAddress string
	ReconcileInterval       time.Duration
	DiscrepancyThreshold    float64 // 0.0001 = 0.01%
	AlertWebhookURL         string
	Port                    int
}

func Load() *Config {
	port, _ := strconv.Atoi(getEnv("PORT", "3024"))
	interval, _ := strconv.Atoi(getEnv("RECONCILE_INTERVAL_SECONDS", "300"))
	threshold, _ := strconv.ParseFloat(getEnv("DISCREPANCY_THRESHOLD", "0.0001"), 64)

	return &Config{
		EthereumRPCURL:          getEnv("ETHEREUM_RPC_URL", "https://mainnet.infura.io/v3/YOUR_KEY"),
		GenexRPCURL:             getEnv("GENEX_RPC_URL", "http://localhost:8545"),
		AxelarGatewayAddress:    getEnv("AXELAR_GATEWAY_ADDRESS", "0x0000000000000000000000000000000000000000"),
		GenexBridgeTokenAddress: getEnv("GENEX_BRIDGE_TOKEN_ADDRESS", "0x0000000000000000000000000000000000000000"),
		ReconcileInterval:       time.Duration(interval) * time.Second,
		DiscrepancyThreshold:    threshold,
		AlertWebhookURL:         getEnv("ALERT_WEBHOOK_URL", ""),
		Port:                    port,
	}
}

func getEnv(key, fallback string) string {
	if v := os.Getenv(key); v != "" {
		return v
	}
	return fallback
}
