# source: https://raw.githubusercontent.com/nakhimchea/trading_bot_dev/5d75481a848217fde14145921d50f16d854097d6/freqtrade/user_data/strategies/SmartSA.py
# This is an integration of LunarCrush APIs to Freqtrade to execute spot market orders
import json
import os
import requests
from datetime import datetime

from pandas import DataFrame

from freqtrade.persistence import Trade
from freqtrade.strategy import IStrategy


def get_exchange_info():
    base_url = 'https://api.binance.com'
    endpoint = '/api/v3/exchangeInfo'

    return requests.get(base_url + endpoint).json()


def quote_symbols_list(quote='USDT'):
    symbols = get_exchange_info()['symbols']
    pairs = {s['symbol']: s for s in symbols if quote in s['symbol']}

    return pairs.keys()


def going2trade():
    data_path = os.path.join(os.getcwd(), 'lunarcrush')
    files = os.listdir(data_path)
    usdt_pairs = quote_symbols_list('USDT')
    #print(usdt_pairs.__len__())
    to_trade = []
    for file in files:
        data = json.load(open(data_path + file))
        acr = data["acr"]

        if max(acr) < 1500 and min(acr) < 150 and acr[acr.__len__() - 1] < 150:
            symbol = file.split('.')[0]
            stablecoins = json.load(open('stablecoins.json'))["symbols"]
            if symbol not in stablecoins:
                pair = symbol+"USDT"
                if pair in usdt_pairs:
                    to_trade.append(pair)

            # p = data["p"]
            # dt = data["dt"]
            # plot_lunar_graph(acr, p, dt)

    #print(to_trade)


class github_nakhimchea_trading_bot_dev__SmartSA__20230117_100415(IStrategy):
    INTERFACE_VERSION: int = 3

    # Buy hyperspace params - None
    buy_params = {}
    # Sell hyperspace params - None
    sell_params = {}

    # ROI table - None
    minimal_roi = {}

    # Stoploss - 5%
    stoploss = -0.05

    # Trailing stop - Disabled
    trailing_stop = False
    trailing_stop_positive = 1
    trailing_stop_positive_offset = 1
    trailing_only_offset_is_reached = True

    # Timeframe is not necessary
    timeframe = "1m"
    startup_candle_count = 1

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        # No Indicator
        return dataframe

    def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        # metadata['pair'] == 'SOL/USDT'  -------  metadata['pair'] == 'ALGO/USDT'

        # going2trade()

        dataframe.loc[
            (),
            "enter_long"] = 1

        return dataframe

    def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        # No Exit
        dataframe.loc[(), 'exit_long'] = 1
        return dataframe

    def custom_exit(self, pair: str, trade: Trade, current_time: datetime, current_rate: float,
                    current_profit: float, **kwargs):

        # Sell any positions at a loss if they are held for more than one day.
        if current_profit < -0.3 and (current_time - trade.open_date_utc).days >= 6:
            return 'unclog'
