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

export interface INavigationTabs {
	userProfile: IUserProfile;
	loading: boolean;
	postfix: string;
	logoutUser?: (token: string) => void;
	loginUser?: (objUser: {
		login: any,
		pass: any,
	}) => void;
	handlerPopupWindow?: (name: string, value: string) => void;
	handlerFilterDetails: (
		exchange: string,
		name: string,
		value: string | boolean
	) => void;
}

export interface IExchangeSwitcher {
	activeExchange: string;
	handlerSwitcher: (exchangeId: string) => void;
	handlerFilterDetails: (
		exchange: string,
		name: string,
		value: string | boolean
	) => void;
}

export interface ISettingsPanel {
	userProfile: IUserProfile;
	userOrderStatuses: any;
	scrollStyle: IScrollStyle;
	filterDetails: IFilterDetails;
	dataConstants: any;
	updateUser: (objUser: IUpdateUser) => void;
	updateItemDetails: (objItem: IUpdateItemDetails) => void;
	insertNewItemToDB: (objItem: IInsertNewItemToDB) => void;
	getGroupItems: (objParams: IGetGroupItems) => void;
	handlerPopupWindow: (name: string, value: string) => void;
	handlerUserProfile: (exchange: string, name: string, value: any) => void;
	checkOrderStatuses: (objCheckStatus: ICheckOrderStatus) => void;
	handlerFilterDetails: (
		exchange: string,
		name: string,
		value: string | boolean
	) => void;
}

export interface ISettingsUser {
	userProfile: IUserProfile;
	userOrderStatuses: any;
	handlerUserProfile: (exchange: string, name: string, value: any) => void;
	updateUser: (objUser: IUpdateUser) => void;
	getGroupItems: (objParams: IGetGroupItems) => void;
	checkOrderStatuses: (objCheckStatus: ICheckOrderStatus) => void;
	handlerPopupWindow: (name: string, value: string) => void;
}

export interface ISettingsCookie {
	listNavExchanges: any;
	listSettingItems: any;
}

export interface ISettingsApp {
	scrollStyle: IScrollStyle;
	dataConstants: any;
	updateItemDetails: (objItem: IUpdateItemDetails) => void;
	handlerFilterDetails: (
		exchange: string,
		name: string,
		value: string | boolean
	) => void;
}

export interface IUserFavorites {
	loading: boolean;
	objExchange: any;
	userProfile: IUserProfile;
	handlerUserProfile: (exchange: string, name: string, value: any) => void;
	getMerchantDetails: (objMerchant: IGetMerchantDetails) => void;
	updateUser: (objUser: IUpdateUser) => void;
}

export interface ICreateUserModal {
	validateForm: (obj: any, idForm: string) => void;
	handlerPopupWindow: (name: string, value: string) => void;
}

export interface IAddNewExchangeModal {
	userId: string;
	insertNewItemToDB: (objItem: IInsertNewItemToDB) => void;
	handlerPopupWindow: (name: string, value: string) => void;
}

export interface IAddNewCurrencyModal {
	userId: string;
	insertNewItemToDB: (objItem: IInsertNewItemToDB) => void;
	handlerPopupWindow: (name: string, value: string) => void;
}

export interface IAddNewPayMethodModal {
	userId: string;
	insertNewItemToDB: (objItem: IInsertNewItemToDB) => void;
	handlerPopupWindow: (name: string, value: string) => void;
}

export interface IAddNewOrderStatusModal {}

export interface IAddNewSubAccountModal {
	userId: string;
	insertNewItemToDB: (objItem: IInsertNewItemToDB) => void;
	handlerPopupWindow: (name: string, value: string) => void;
}

export interface IEditPassUserModal {
	validateForm: (obj: any, idForm: string) => void;
	userProfile: IUserProfile;
}

export interface IEditProfileUserModal {
	handlerUserProfile: (exchange: string, name: string, value: any) => void;
	validateForm: (obj: any, idForm: string) => void;
	getListOption: (arr: any, nameList: string) => any;
	updateUser: (objUser: IUpdateUser) => void;
	userProfile: IUserProfile;
	dataConstants: any;
}

export interface IPasswordResetModal {
	validateForm: (obj: any, idForm: string) => void;
	handlerPopupWindow: (name: string, value: string) => void;
}

export interface IModalMessagesProps {
	category: string;
	message: string;
}

export interface IEditOrderModal {
	dataConstants: any;
	orderDetails: any;
	updateItemDetails: (objItem: IUpdateItemDetails) => void;
	handlerFilterDetails: (
		exchange: string,
		name: string,
		value: string | boolean
	) => void;
}

export interface IEditExchangeItemModal {
	itemDetails: any;
	updateItemDetails: (objItem: IUpdateItemDetails) => void;
	handlerFilterDetails: (
		exchange: string,
		name: string,
		value: string | boolean
	) => void;
}

export interface IEditCurrencyItemModal {
	dataConstants: any;
	itemDetails: any;
	updateItemDetails: (objItem: IUpdateItemDetails) => void;
	handlerFilterDetails: (
		exchange: string,
		name: string,
		value: string | boolean
	) => void;
}

export interface IEditPaymentItemModal {
	dataConstants: any;
	itemDetails: any;
	updateItemDetails: (objItem: IUpdateItemDetails) => void;
	handlerFilterDetails: (
		exchange: string,
		name: string,
		value: string | boolean
	) => void;
}

export interface IEditOrderStatusModal {
	dataConstants: any;
	itemDetails: any;
	updateItemDetails: (objItem: IUpdateItemDetails) => void;
	handlerFilterDetails: (
		exchange: string,
		name: string,
		value: string | boolean
	) => void;
}

export interface IEditUserPayTypesModal {
	getListOption: (arr: any, nameList: string) => any;
	updateUser: (objUser: IUpdateUser) => void;
	userProfile: IUserProfile;
	dataConstants: any;
}

export interface IInsertBalanceModal {
	userId: string;
	admin: boolean;
	currentCourses: any;
	balanceDetails: any;
	insertBalanceToDB: (objBalanceDB: IInsertBalanceToDB) => void;
}

export interface IEditAdvModal {
	handlerAdvDetails: (name: string, value: string) => void;
	handlerPopupWindow: (name: string, value: string) => void;
	updateAdv: (objParams: IUpdateAdv) => void;
	handlerFilterDetails: (
		exchange: string,
		name: string,
		value: string | boolean
	) => void;
	merchantPayMethods: any;
	currentCourses: any;
	p2pBalance: any;
	// advDetails: any;
	filterDetails: IFilterDetails;
	userId: string;
	objExchange: any;
}

export interface ICounterPanel {
	userProfile: IUserProfile;
	loading: boolean;
	exchanges: any;
}

export interface ICounterOrders {
	prefix: string;
	orders: any;
	loading: boolean;
	statuses: any;
	orderStatus: number | string;
	soundAlert: string;
	isSound: boolean;
	handlerSound: (isSound: boolean) => void;
}

export interface IFilterP2POrders {
	getP2POrders: (objOrder: IGetP2POrders) => void;
	handlerPopupWindow: (name: string, value: string) => void;
	handlerUserProfile: (exchange: string, name: string, value: any) => void;
	getListOption: (arr: any, nameList: string) => any;
	userProps: any;
	objExchange: any;
	arrPayTypes: any;
	currentCourses: any;
}

export interface IFilterUserAdvs {
	getMerchantAdvs: (objOrder: IGetMerchantAdvs) => void;
	getListOption: (arr: any, nameList: string) => any;
	handlerPopupWindow: (name: string, value: string) => void;
	handlerFilterDetails: (
		exchange: string,
		name: string,
		value: string | boolean
	) => void;
	userId: string;
	objExchange: any;
	arrFilterTypes: any;
}

export interface IFilterUserOrders {
	getMerchantOrders: (objOrder: IGetMerchantOrders) => void;
	getListOption: (arr: any, nameList: string) => any;
	handlerUserProfile: (exchange: string, name: string, value: any) => void;
	insertOrderToDB: (objInsertDB: IInsertOrderToDB) => void;
	updateUser: (objUser: IUpdateUser) => void;
	handlerPopupWindow: (name: string, value: string) => void;
	handlerFilterDetails: (
		exchange: string,
		name: string,
		value: string | boolean
	) => void;
	objExchange: any;
	updateOrders: boolean;
	arrOrderIds: string[];
	userId: string;
	userAuth: boolean;
	merchantPayMethods: any;
}

export interface IListP2POrders {
	userProps: any;
	objExchange: any;
	currentCourses: any;
	scrollStyle: IScrollStyle;
	getEditableAdv: (objParams: IGetEditableAdv) => void;
	handlerPopupWindow: (name: string, value: string) => void;
	handlerUserProfile: (exchange: string, name: string, value: any) => void;
	updateUser: (objUser: IUpdateUser) => void;
}

export interface IListFavoriteAdvs {
	favoriteAdvs: any;
	currentCourses: any;
	scrollStyle: { height: number, width: number };
}

export interface IListUserAdvs {
	userId: string;
	advs: any;
	scrollStyle: IScrollStyle;
	objExchange: any;
	currentCourses: any;
	changeAdvStatus: (objAdv: IChangeAdvStatus) => any;
	getEditableAdv: (objParams: IGetEditableAdv) => void;
	handlerPopupWindow: (name: string, value: string) => void;
}

export interface IListUserAdvsHB {
	advs: any;
	activeExchange: string;
	scrollStyle: IScrollStyle;
	currentCourses: any;
	getPayDots: (exchange: string, arr: any) => any;
	changeAdvStatus: (objAdv: IChangeAdvStatus) => any;
	handlerPopupWindow: (name: string, value: string) => void;
	getEditableAdv: (objParams: IGetEditableAdv) => void;
}

export interface IListUserAdvsKX {
	advs: any;
	activeExchange: string;
	scrollStyle: IScrollStyle;
	currentCourses: any;
	getPayDots: (exchange: string, arr: any) => any;
	changeAdvStatus: (objAdv: IChangeAdvStatus) => any;
	handlerPopupWindow: (name: string, value: string) => void;
	getEditableAdv: (objParams: IGetEditableAdv) => void;
}

export interface IListUserAdvsBZ {
	advs: any;
	activeExchange: string;
	scrollStyle: IScrollStyle;
	currentCourses: any;
	getPayDots: (exchange: string, arr: any) => any;
	changeAdvStatus: (objAdv: IChangeAdvStatus) => any;
	handlerPopupWindow: (name: string, value: string) => void;
	getEditableAdv: (objParams: IGetEditableAdv) => void;
}

export interface IListUserAdvsGX {
	advs: any;
	activeExchange: string;
	scrollStyle: IScrollStyle;
	currentCourses: any;
	getPayDots: (exchange: string, arr: any) => any;
	changeAdvStatus: (objAdv: IChangeAdvStatus) => any;
	handlerPopupWindow: (name: string, value: string) => void;
	getEditableAdv: (objParams: IGetEditableAdv) => void;
}

export interface IListUserAdvsBT {
	advs: any;
	activeExchange: string;
	scrollStyle: IScrollStyle;
	currentCourses: any;
	getPayDots: (exchange: string, arr: any) => any;
	changeAdvStatus: (objAdv: IChangeAdvStatus) => any;
	handlerPopupWindow: (name: string, value: string) => void;
	getEditableAdv: (objParams: IGetEditableAdv) => void;
}

export interface IListUserAdvsPX {
	advs: any;
	activeExchange: string;
	scrollStyle: IScrollStyle;
	currentCourses: any;
	getPayDots: (exchange: string, arr: any) => any;
	changeAdvStatus: (objAdv: IChangeAdvStatus) => any;
	handlerPopupWindow: (name: string, value: string) => void;
	getEditableAdv: (objParams: IGetEditableAdv) => void;
}

export interface IListUserOrders {
	userId: string;
	postfix: string;
	objExchange: any;
	merchantOrders: any;
	currentCourses: any;
	scrollStyle: IScrollStyle;
	getEditableOrder: (objOrder: IGetEditableOrder) => void;
}

export interface IUserBalances {
	userId: string;
	objExchange: any;
	balances: any;
	currentCourses: any;
	scrollStyle: { height: number, width: number };
	getBalances: (objParams: IGetBalances) => void;
	transferAsset: (objParams: ITransferAsset) => void;
	handlerPopupWindow: (name: string, value: string) => void;
}

export interface IScrollStyle {
	height: number;
	width: number;
}

export interface IListAllPayTypes {
	scrollStyle: IScrollStyle;
	dataConstants: any;
	updateItemDetails: (objItem: IUpdateItemDetails) => void;
	handlerFilterDetails: (
		exchange: string,
		name: string,
		value: string | boolean
	) => void;
}

export interface IListAllOrderStatus {
	scrollStyle: IScrollStyle;
	dataConstants: any;
	updateItemDetails: (objItem: IUpdateItemDetails) => void;
	handlerFilterDetails: (
		exchange: string,
		name: string,
		value: string | boolean
	) => void;
}

export interface IListAllExchanges {
	scrollStyle: IScrollStyle;
	dataConstants: any;
	handlerFilterDetails: (
		exchange: string,
		name: string,
		value: string | boolean
	) => void;
}

export interface IListAllCurrencies {
	scrollStyle: IScrollStyle;
	dataConstants: any;
	updateItemDetails: (objItem: IUpdateItemDetails) => void;
	handlerFilterDetails: (
		exchange: string,
		name: string,
		value: string | boolean
	) => void;
}

export interface IListAllSubAccounts {
	// dataConstants: any;
	scrollStyle: IScrollStyle;
	handlerFilterDetails: (
		exchange: string,
		name: string,
		value: string | boolean
	) => void;
}

export interface IFilterUserReports {
	userProps: { userId: string, userStatus: string };
	dataConstants: any;
	reportDateRange: { startDate: any, endDate: any };
	handlerPopupWindow: (name: string, value: string) => void;
	getReportOrders: (objParamReport: IGetReportOrders) => void;
}

export interface IReportPanel {
	reportMerchantOrders: any;
	reportSpotOrders: any;
	reportBalances: any;
	reportCost: any;
	reportStats: any;
	merchantPayMethods: any;
	dataConstants: any;
	currentCourses: any;
	fundingRates: any;
	userProfile: IUserProfile;
	scrollStyle: IScrollStyle;
	getHistorySpotOrders: (objParams: IGetHistorySpotOrders) => void;
	getActiveSpotOrders: (objParams: IGetActiveSpotOrders) => void;
	getGroupItems: (objParams: IGetGroupItems) => void;
	startWebSocket: () => void;
	getFundingRates: (userId: string) => void;
	handlerFilterDetails: (
		exchange: string,
		name: string,
		value: string | boolean
	) => void;
	handlerPopupWindow: (name: string, value: string) => void;
	getEditableOrder: (objOrder: IGetEditableOrder) => void;
}

export interface IReportStatSPOT {
	activeExchanges: any;
	reportSpotOrders: any;
}

export interface IReportStatMonth {
	activeExchanges: any;
	monthStats: any;
	scrollStyle: { height: number, width: number };
}

export interface IReportStatAnnualv1 {
	yearStatsV1: any;
	scrollStyle: { height: number, width: number };
}

export interface IReportStatAnnualv2 {
	yearStatsV2: any;
	scrollStyle: { height: number, width: number };
}

export interface IReportStatAnnualv3 {
	yearStatsV3: any;
	scrollStyle: { height: number, width: number };
}

export interface IReportAllUserOrders {
	getEditableOrder: (objOrder: IGetEditableOrder) => void;
	userId: string;
	merchantOrders: any;
	currentCourses: any;
	scrollStyle: { height: number, width: number };
}

export interface IReportAllSpotOrders {
	typeSpotOrder: string;
	spotOrders: any;
	currentCourses: any;
	scrollStyle: IScrollStyle;
}

export interface IReportSpotOrders {
	reportSpotOrders: any;
	tradeType: string;
}

export interface IReportBalances {
	reportBalances: any;
	scrollStyle: IScrollStyle;
}

export interface IReportTotalSumm {
	userProfile: IUserProfile;
	scrollStyle: IScrollStyle;
	currentCourses: any;
	dataConstants: any;
	getGroupItems: (objParams: IGetGroupItems) => void;
	handlerPopupWindow: (name: string, value: string) => void;
	handlerFilterDetails: (
		exchange: string,
		name: string,
		value: any
	) => void;
}

export interface IReportCostNew {
	reportCost: any;
	scrollStyle: IScrollStyle;
}

export interface IReportAppWs {
	startWebSocket: () => void;
	getFundingRates: (userId: string) => void;
	userId: string;
	fundingRates: any;
	scrollStyle: IScrollStyle;
}
