namespace Managing.Common
{
    public class Constants
    {
        public class DiscordSlashCommand
        {
            public const string Leaderboard = "leaderboard";
            public const string Noobiesboard = "noobiesboard";
            public const string LeaderboardPosition = "leaderboardposition";
            public const string FundingRates = "fundingrates";
        }

        public class DiscordButtonAction
        {
            public const string OpenPosition = "openposition";
            public const string ClosePosition = "closeposition";
            public const string CopyPosition = "ctp";
        }

        public class Databases
        {
            public const string InfluxDb = "InfluxDb";
            public const string PostgreSql = "PostgreSql";
        }

        public class ThirdParty
        {
            public const string Privy = "Privy";
        }

        public class Chains
        {
            public const string Ethereum = "Ethereum";
            public const string Arbitrum = "Arbitrum";
            public const string ArbitrumGoerli = "ArbitrumGoerli";
            public const string Goerli = "Goerli";
        }

        public class Stablecoins
        {
            public const string Usd = "USD";
            public const string Usdt = "USDT";
        }

        public class GMX
        {
            public const string OPEN_INTEREST = "OPEN_INTEREST";
            public const string LONG_INTEREST_USD_KEY = "MAX_OPEN_INTEREST";
            public const string POOL_AMOUNT_KEY = "POOL_AMOUNT";
            public const string MARKET_DISABLED_KEY = "IS_MARKET_DISABLED";
            public const string MAX_PNL_FACTOR_FOR_TRADERS = "MAX_PNL_FACTOR_FOR_TRADERS";
            public const string ACCOUNT_ORDER_LIST_KEY = "ACCOUNT_ORDER_LIST";
            public const string DEPOSIT_GAS_LIMIT_KEY = "DEPOSIT_GAS_LIMIT";
            public const string WITHDRAWAL_GAS_LIMIT_KEY = "WITHDRAWAL_GAS_LIMIT";
            public const string SHIFT_GAS_LIMIT_KEY = "SHIFT_GAS_LIMIT";
            public const string SINGLE_SWAP_GAS_LIMIT_KEY = "SINGLE_SWAP_GAS_LIMIT";
            public const string SWAP_ORDER_GAS_LIMIT_KEY = "SWAP_ORDER_GAS_LIMIT";
            public const string INCREASE_ORDER_GAS_LIMIT_KEY = "INCREASE_ORDER_GAS_LIMIT";
            public const string DECREASE_ORDER_GAS_LIMIT_KEY = "DECREASE_ORDER_GAS_LIMIT";
            public const string ESTIMATED_GAS_FEE_BASE_AMOUNT = "ESTIMATED_GAS_FEE_BASE_AMOUNT_V2_1";
            public const string ESTIMATED_GAS_FEE_PER_ORACLE_PRICE = "ESTIMATED_GAS_FEE_PER_ORACLE_PRICE";
            public const string ESTIMATED_GAS_FEE_MULTIPLIER_FACTOR = "ESTIMATED_GAS_FEE_MULTIPLIER_FACTOR";

            public class Config
            {
                public const string OracleKeeperUrl = "https://arbitrum-v2-1-api.gmxinfra.io";

                public static readonly HashSet<Enums.Ticker> DeltaNeutralTickers = new()
                {
                    Enums.Ticker.BTC,
                    Enums.Ticker.ARB,
                    Enums.Ticker.ETH,
                    Enums.Ticker.BNB,
                    Enums.Ticker.SOL,
                    Enums.Ticker.LINK,
                    Enums.Ticker.OP,
                    Enums.Ticker.UNI,
                    Enums.Ticker.AAVE,
                    Enums.Ticker.PEPE,
                    Enums.Ticker.WIF,
                };

                public static class Decimals
                {
                    public const int USD = 30;
                }

                public const decimal MinimumPositionAmount = 3m;
            }

            public class TokenAddress
            {
                public const string WETH = "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1";
                public const string WSTETH = "0x5979D7b546E38E414F7E9822514be443A4800529";
                public const string WBTC = "0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f";
                public const string ARB = "0x912CE59144191C1204E64559FE8253a0e49E6548";
                public const string SOL = "0x2bcC6D6CdBbDC0a4071e48bb3B969b06B3330c07";
                public const string LINK = "0xf97f4df75117a78c1A5a0DBb814Af92458539FB4";
                public const string UNI = "0xFa7F8980b0f1E64A2062791cc3b0871572f1F7f0";
                public const string USDCE = "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8";
                public const string USDC = "0xaf88d065e77c8cC2239327C5EDb3A432268e5831";
                public const string USDT = "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9";
                public const string DAI = "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1";
                public const string USDE = "0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34";
                public const string FRAX = "0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F";
                public const string MIM = "0xFEa7a6a0B346362BF88A9e4A88416B77a57D6c2A";
                public const string BTC = "0x47904963fc8b2340414262125aF798B9655E58Cd";
                public const string DOGE = "0xC4da4c24fd591125c3F47b340b6f4f76111883d8";
                public const string LTC = "0xB46A094Bc4B0adBD801E14b9DB95e05E28962764";
                public const string XRP = "0xc14e065b0067dE91534e032868f5Ac6ecf2c6868";
                public const string GMX = "0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a";
                public const string WBNB = "0xa9004A5421372E1D83fB1f85b0fc986c912f91f3";
                public const string ATOM = "0x7D7F1765aCbaF847b9A1f7137FE8Ed4931FbfEbA";
                public const string AAVE = "0xba5DdD1f9d7F570dc94a51479a000E3BCE967196";
                public const string AVAX = "0x565609fAF65B92F7be02468acF86f8979423e514";
                public const string OP = "0xaC800FD6159c2a2CB8fC31EF74621eB430287a5A";
                public const string PEPE = "0x25d887Ce7a35172C62FeBFD67a1856F20FaEbB00";
                public const string WIF = "0xA1b91fe9FD52141Ff8cac388Ce3F10BFDc1dE79d";
                public const string SHIB = "0x3E57D02f9d196873e55727382974b02EdebE6bfd";
                public const string APE = "0x74885b4D524d497261259B38900f54e6dbAd2210";
                public const string NEAR = "0x1FF7F3EFBb9481Cbd7db4F932cBCD4467144237C";
                public const string STX = "0xBaf07cF91D413C0aCB2b7444B9Bf13b4e03c9D71";
                public const string ORDI = "0x1E15d08f3CA46853B692EE28AE9C7a0b88a9c994";
            }

            public class Markets
            {
                public const string BTCUSDC = "0x47c031236e19d024b42f8AE6780E44A573170703";
                public const string ETHUSDC = "0x70d95587d40A2caf56bd97485aB3Eec10Bee6336";
                public const string SOLUSD = "0x09400D9DB990D5ed3f35D7be61DfAEB900Af03C9";
                public const string LINKUSD = "0x7f1fa204bb700853D36994DA19F830b6Ad18455C";
                public const string UNIUSD = "0xc7Abb2C5f3BF3CEB389dF0Eecd6120D451170B50";
                public const string DOGEUSD = "0x6853EA96FF216fAb11D2d930CE3C508556A4bdc4";
                public const string LTCUSD = "0xD9535bB5f58A1a75032416F2dFe7880C30575a41";
                public const string XRPUSD = "0x0CCB4fAa6f1F1B30911619f1184082aB4E25813c";
                public const string GMXUSD = "0x55391D178Ce46e7AC8eaAEa50A72D1A5a8A622Da";
                public const string BNBUSD = "0x2d340912Aa47e33c90Efb078e69E70EFe2B34b9B";
                public const string ATOMUSD = "0x248C35760068cE009a13076D573ed3497A47bCD4";
                public const string AAVEUSD = "0x1CbBa6346F110c8A5ea739ef2d1eb182990e4EB2";
                public const string AVAXUSD = "0x7BbBf946883a5701350007320F525c5379B8178A";
                public const string OPUSD = "0x4fDd333FF9cA409df583f306B6F5a7fFdE790739";
                public const string PEPEUSD = "0x2b477989A149B17073D9C9C82eC9cB03591e20c6";
                public const string WIFUSD = "0x0418643F94Ef14917f1345cE5C460C37dE463ef7";
                public const string SHIBUSD = "0xB62369752D8Ad08392572db6d0cc872127888beD";
                public const string APEUSD = "0x74885b4D524d497261259B38900f54e6dbAd2210";
                public const string NEARUSD = "0x63Dc80EE90F26363B3FCD609007CC9e14c8991BE";
                public const string ARBUSD = "0xC25cEf6061Cf5dE5eb761b50E4743c1F5D7E5407";
                public const string BTCUSD = "0x7C11F78Ce78768518D743E81Fdfa2F860C6b9A77";
                public const string ETHUSD = "0x450bb6774Dd8a756274E0ab4107953259d2ac541";
                public const string STXUSD = "0xD9377d9B9a2327C7778867203deeA73AB8a68b6B";
                public const string ORDIUSD = "0x93385F7C646A3048051914BDFaC25F4d620aeDF1";
            }
        }
    }
}