# -*- coding: utf-8 -*-
import requests
from datetime import datetime
import json
class MtctpTradeInclude:
    def __init__(self, url,accout):
        self.url = url
        self.accout = accout
        self.headers = {
            "Content-Type": "application/json; charset=gbk",
            "Accept-Encoding": "gbk"
        }
        self.OrderTicket = []
        self.OrderSymbol = []
        self.OrderType = []
        self.OrderLots = []
        self.OrderOpenPrice = []
        self.OrderOpenTime = []
        self.OrderClosePrice = []
        self.OrderCloseTime = []
        self.OrderStopLoss = []
        self.OrderTakeProfit = []
        self.OrderFee = []
        self.OrderSwap = []
        self.OrderCommission = []
        self.OrderProfit = []
        self.OrderPoints = []
        self.OrderMagicNumber = []
        self.OrderComment = []
        self.OrderExpiration = []

        self.HistoryOrderTicket = []
        self.HistoryOrderSymbol = []
        self.HistoryOrderType = []
        self.HistoryOrderLots = []
        self.HistoryOrderOpenPrice = []
        self.HistoryOrderOpenTime = []
        self.HistoryOrderClosePrice = []
        self.HistoryOrderCloseTime = []
        self.HistoryOrderStopLoss = []
        self.HistoryOrderTakeProfit = []
        self.HistoryOrderFee = []
        self.HistoryOrderSwap = []
        self.HistoryOrderCommission = []
        self.HistoryOrderProfit = []
        self.HistoryOrderPoints = []
        self.HistoryOrderMagicNumber = []
        self.HistoryOrderComment = []
        self.HistoryOrderExpiration = []

        self.not_group = []
        self.hit_group = []

        self.SYMBOL_DIGITS = 0
        self.SYMBOL_TIME = 0
        self.SYMBOL_BID = 0
        self.SYMBOL_ASK = 0
        self.SYMBOL_POINT = 0

        self.ACCOUNT_BALANCE = 0
        self.ACCOUNT_PROFIT = 0
        self.ACCOUNT_EQUITY = 0
        self.ACCOUNT_TYPE=''

        self.OrdersTotal=0
        self.OrdersHistoryTotal=0

    def OrdersAndHistoryTotal(self):
        order_params = {
            "action": 2
        }
        response = requests.get(self.url, params=order_params,headers=self.headers)
        response.encoding = 'gbk'
        if response.status_code == 200:
            self.OrdersTotal = 0
            self.OrdersHistoryTotal = 0
            self.OrderTicket.clear()
            self.OrderSymbol.clear()
            self.OrderType.clear()
            self.OrderLots.clear()
            self.OrderOpenPrice.clear()
            self.OrderOpenTime.clear()
            self.OrderClosePrice.clear()
            self.OrderCloseTime.clear()
            self.OrderStopLoss.clear()
            self.OrderTakeProfit.clear()
            self.OrderFee.clear()
            self.OrderSwap.clear()
            self.OrderCommission.clear()
            self.OrderProfit.clear()
            self.OrderPoints.clear()
            self.OrderMagicNumber.clear()
            self.OrderComment.clear()
            self.OrderExpiration.clear()

            self.HistoryOrderTicket.clear()
            self.HistoryOrderSymbol.clear()
            self.HistoryOrderType.clear()
            self.HistoryOrderLots.clear()
            self.HistoryOrderOpenPrice.clear()
            self.HistoryOrderOpenTime.clear()
            self.HistoryOrderClosePrice.clear()
            self.HistoryOrderCloseTime.clear()
            self.HistoryOrderStopLoss.clear()
            self.HistoryOrderTakeProfit.clear()
            self.HistoryOrderFee.clear()
            self.HistoryOrderSwap.clear()
            self.HistoryOrderCommission.clear()
            self.HistoryOrderProfit.clear()
            self.HistoryOrderPoints.clear()
            self.HistoryOrderMagicNumber.clear()
            self.HistoryOrderComment.clear()
            self.HistoryOrderExpiration.clear()

            self.not_group.clear()
            self.hit_group.clear()
            for item in json.loads(response.text):
                if 'not' in item and item['not'] != 0:
                    self.not_group.append(item)
                    self.OrdersTotal+=1
                elif 'hit' in item and item['hit'] != 0:
                    self.hit_group.append(item)
                    self.OrdersHistoryTotal +=1
        for item in self.not_group:
            self.OrderTicket.append(item.get('not', None))
            self.OrderSymbol.append(item.get('sym', None))
            self.OrderType.append(item.get('typ', None))
            self.OrderLots.append(item.get('lot', None))
            self.OrderOpenPrice.append(item.get('opr', None))
            self.OrderOpenTime.append(item.get('opt', None))
            self.OrderClosePrice.append(item.get('cpr', None))
            self.OrderCloseTime.append(item.get('cpt', None))
            self.OrderStopLoss.append(item.get('sl', None))
            self.OrderTakeProfit.append(item.get('tp', None))
            self.OrderFee.append(item.get('fee', None))
            self.OrderSwap.append(item.get('wap', None))
            self.OrderCommission.append(item.get('ssi', None))
            self.OrderProfit.append(item.get('pro', None))
            self.OrderPoints.append(item.get('pnt', None))
            self.OrderMagicNumber.append(item.get('mag', None))
            self.OrderComment.append(item.get('com', None))
            self.OrderExpiration.append(item.get('epx', None))

        for item in self.hit_group:
            self.HistoryOrderTicket.append(item.get('hit', None))
            self.HistoryOrderSymbol.append(item.get('sym', None))
            self.HistoryOrderType.append(item.get('typ', None))
            self.HistoryOrderLots.append(item.get('lot', None))
            self.HistoryOrderOpenPrice.append(item.get('opr', None))
            self.HistoryOrderOpenTime.append(item.get('opt', None))
            self.HistoryOrderClosePrice.append(item.get('cpr', None))
            self.HistoryOrderCloseTime.append(item.get('cpt', None))
            self.HistoryOrderStopLoss.append(item.get('sl', None))
            self.HistoryOrderTakeProfit.append(item.get('tp', None))
            self.HistoryOrderFee.append(item.get('fee', None))
            self.HistoryOrderSwap.append(item.get('wap', None))
            self.HistoryOrderCommission.append(item.get('ssi', None))
            self.HistoryOrderProfit.append(item.get('pro', None))
            self.HistoryOrderPoints.append(item.get('pnt', None))
            self.HistoryOrderMagicNumber.append(item.get('mag', None))
            self.HistoryOrderComment.append(item.get('com', None))
            self.HistoryOrderExpiration.append(item.get('epx', None))

    def OrderSend(self,symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment=None, magic=0, expiration=0, arrow_color="NONE"):
        order_params = {
            "action": 0,
            "symbol": symbol,
            "cmd": cmd,
            "volume": volume,
            "price": price,
            "slippage": slippage,
            "stoploss": stoploss,
            "takeprofit": takeprofit,
            "comment": comment,
            "magic": magic,
            "expiration": expiration,
            "arrow_color": arrow_color,
            "AccountNumber": self.accout
        }
        response = requests.get(self.url, params=order_params,headers=self.headers)
        response.encoding = 'gbk'
        if response.status_code == 200:
         return json.loads(response.text)
        return response

    def OrderClose(self,tick, lots, price, slippage, arrow_color="NONE"):
        order_params = {
            "action": 1,
            "tick": tick,
            "lots": lots,
            "price": price,
            "slippage": slippage,
            "arrow_color": arrow_color,
            "AccountNumber": self.accout,
        }
        response = requests.get(self.url, params=order_params,headers=self.headers)
        response.encoding = 'gbk'
        if response.status_code == 200:
         return json.loads(response.text)
        return response

    def SymbolInfo(self,symbol):
        order_params = {
            "action": 3,
            "symbol": symbol
        }
        response = requests.get(self.url, params=order_params,headers=self.headers)
        response.encoding = 'gbk'
        if response.status_code == 200:
            self.SYMBOL_DIGITS = 0
            self.SYMBOL_TIME = 0
            self.SYMBOL_BID = 0
            self.SYMBOL_ASK = 0
            self.SYMBOL_POINT = 0
            data=json.loads(response.text)
            if data:
                self.SYMBOL_DIGITS = data[0].get('SYMBOL_DIGITS', 0)
                self.SYMBOL_TIME = data[0].get('SYMBOL_TIME', 0)
                self.SYMBOL_BID = data[0].get('SYMBOL_BID', 0)
                self.SYMBOL_ASK = data[0].get('SYMBOL_ASK', 0)
                self.SYMBOL_POINT = data[0].get('SYMBOL_POINT', 0)
        return response

    def AccountInfo(self):
        order_params = {
            "action": 4,
        }
        response = requests.get(self.url, params=order_params,headers=self.headers)
        response.encoding = 'gbk'
        if response.status_code == 200:
            self.ACCOUNT_BALANCE = 0
            self.ACCOUNT_PROFIT = 0
            self.ACCOUNT_EQUITY = 0
            data = json.loads(response.text)
            if data:
                self.ACCOUNT_BALANCE = data[0].get('ACCOUNT_BALANCE', 0)
                self.ACCOUNT_PROFIT = data[0].get('ACCOUNT_PROFIT', 0)
                self.ACCOUNT_EQUITY = data[0].get('ACCOUNT_EQUITY', 0)
        return response


    def Initialize(self):
        order_params = {
            "action": 100,
        }
        response = requests.get(self.url, params=order_params,headers=self.headers)
        response.encoding = 'gbk'
        if response.status_code == 200:
            data = json.loads(response.text)
            if data:
                self.ACCOUNT_TYPE = data[0].get('ACCOUNT_TYPE', 0)
                if data[0].get('AccountNumber', 0)==self.accout:
                    return True

    def log(self, message, magic):
        # 获取当前时间，格式化为包含毫秒的字符串
        current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
        print(f"[{current_time}] [账号: {self.accout}] [账户类型: {self.ACCOUNT_TYPE}] [magic: {magic}] {message}")

