import {
	IScrollStyle,
	ILoginUser,
	ICreateNewUser,
	IUpdateUser,
	IFilterDetails,
	IMessagePopup,
	IUserProfile,
	IGetP2POrders,
	IGetMerchantOrders,
	IGetMerchantDetails,
	IGetMerchantAdvs,
	IGetHistorySpotOrders,
	IGetActiveSpotOrders,
	IInsertOrderToDB,
	IInsertNewItemToDB,
	IInsertBalanceToDB,
	ICheckOrderStatus,
	IGetReportOrders,
	IGetBalances,
	ITransferAsset,
	IGetEditableAdv,
	IGetEditableOrder,
	IUpdateAdv,
	IUpdateItemDetails,
	IChangeAdvStatus,
	IGetGroupItems,
} from "."

export interface IAppProps {
	store: {
		userProfile: IUserProfile,
		filterDetails: IFilterDetails,
		messagePopup: IMessagePopup,
		loading: boolean,
		loaded: boolean,
		error: null,
		userOrderStatuses: any,
		payTypesList: any,
		advDetails: any,
		currentCourses: any,
		fundingRates: any,
		reports: {
			reportSpotOrders: any,
			reportMerchantOrders: any,
			reportBalances: any,
			reportCost: any,
			reportStats: any,
		},
	};
	getP2POrdersToApp: (objOrder: IGetP2POrders) => void;
	getMerchantOrdersToApp: (objOrder: IGetMerchantOrders) => void;
	getMerchantAdvsToApp: (objAdvs: IGetMerchantAdvs) => void;
	getMerchantDetailsToApp: (objMerchant: IGetMerchantDetails) => void;
	getHistorySpotOrdersToApp: (objParams: IGetHistorySpotOrders) => void;
	getActiveSpotOrdersToApp: (objParams: IGetActiveSpotOrders) => void;
	insertOrderToDBToApp: (objInsertDB: IInsertOrderToDB) => void;
	insertNewItemToDBToApp: (objItem: IInsertNewItemToDB) => void;
	insertBalanceToDBToApp: (objBalanceDB: IInsertBalanceToDB) => void;
	checkOrderStatusesToApp: (objCheckStatus: ICheckOrderStatus) => void;
	getReportOrdersToApp: (objParamReport: IGetReportOrders) => void;
	getGroupItemsToApp: (objParams: IGetGroupItems) => void;
	startWebSocketToApp: () => void;
	getFundingRatesToApp: (userId: string) => void;
	getBalancesToApp: (objParams: IGetBalances) => void;
	transferAssetToApp: (objParams: ITransferAsset) => void;
	getEditableAdvToApp: (objParams: IGetEditableAdv) => void;
	getEditableOrderToApp: (objOrder: IGetEditableOrder) => void;
	updateUserToApp: (objUser: IUpdateUser) => void;
	updateAdvToApp: (objParams: IUpdateAdv) => void;
	updateItemDetailsToApp: (objOrder: IUpdateItemDetails) => void;
	changeAdvStatusToApp: (objAdv: IChangeAdvStatus) => void;
	handlerFilterDetailsToApp: (
		exchange: string,
		name: string,
		value: string | boolean
	) => void;
	handlerAdvDetailsToApp: (name: string, value: string) => void;
	handlerUserProfileToApp: (
		exchange: string,
		name: string,
		value: string | boolean
	) => void;
	handlerPopupWindowToApp: (name: string, value: string) => void;
	logoutUserToApp: (token: string) => void;
	loginUserToApp: (objUser: ILoginUser) => void;
	createNewUserToApp: (objNewUser: ICreateNewUser) => void;
	resetPasswordToApp: (userLogin: any) => void;
}

export interface ITradeModul {
	filterDetails: IFilterDetails;
	userProfile: IUserProfile;
	userOrderStatuses: any;
	reportCost: any;
	reportStats: any;
	reportBalances: any;
	reportMerchantOrders: any;
	reportSpotOrders: any;
	loading: boolean;
	currentCourses: any;
	fundingRates: any;
	objExchange: any;
	dataConstants: any;
	scrollStyle: IScrollStyle;
	getHistorySpotOrders: (objParams: IGetHistorySpotOrders) => void;
	getActiveSpotOrders: (objParams: IGetActiveSpotOrders) => void;
	logoutUser: (token: string) => void;
	loginUser: (objUser: ILoginUser) => void;
	getListOption: (exchange: string, arr: any) => void;
	getP2POrders: (objOrder: IGetP2POrders) => void;
	getPayDots: (exchange: string, arr: any) => void;
	updateUser: (objUser: IUpdateUser) => void;
	updateAdv: (objParams: IUpdateAdv) => void;
	updateItemDetails: (objItem: IUpdateItemDetails) => void;
	getMerchantOrders: (objOrder: IGetMerchantOrders) => void;
	getMerchantDetails: (objMerchant: IGetMerchantDetails) => void;
	getMerchantAdvs: (objAdvs: IGetMerchantAdvs) => void;
	changeAdvStatus: (objAdv: IChangeAdvStatus) => void;
	getEditableAdv: (objParams: IGetEditableAdv) => void;
	getEditableOrder: (objOrder: IGetEditableOrder) => void;
	insertOrderToDB: (objInsertDB: IInsertOrderToDB) => void;
	insertNewItemToDB: (objItem: IInsertNewItemToDB) => void;
	checkOrderStatuses: (objCheckStatus: ICheckOrderStatus) => void;
	getBalances: (objParams: IGetBalances) => void;
	transferAsset: (objParams: ITransferAsset) => void;
	getReportOrders: (objParamReport: IGetReportOrders) => void;
	getGroupItems: (objParams: IGetGroupItems) => void;
	startWebSocket: () => void;
	getFundingRates: (userId: string) => void;
	handlerAdvDetails: (name: string, value: string) => void;
	handlerPopupWindow: (name: string, value: string) => void;
	handlerFilterDetails: (
		exchange: string,
		name: string,
		value: string | boolean
	) => void;
	handlerUserProfile: (
		exchange: string,
		name: string,
		value: string | boolean
	) => void;
}

export interface IRequestHeader {
	cookie?: string; // BN, BZ
	csrftoken?: string; // BN
	deviceInfo?: string; // BN
	authorization?: string; // KX
	devId?: string; // KX
	token?: string; // HB, GX
	usertoken?: string; // BT
	fingerprint?: string; // HB
	traceId?: string; // HB
	userAgent: string;
	timestamp: number;
}
