import { Action } from 'redux';

import { SERVER } from './actionsTypes';

interface ISelectServer extends Action {
	server: string;
	version?: string;
	fetchVersion: boolean;
	changeServer: boolean;
}

interface ISelectServerSuccess extends Action {
	server: string;
	version: string;
}

interface IServer extends Action {
	server: string;
	username: string | null;
	fromServerHistory: boolean;
}

interface IServerInit extends Action {
	previousServer: string;
}

interface IServerFailure extends Action {
	err: any;
}

export type TActionServer = ISelectServer & ISelectServerSuccess & IServer & IServerInit & IServerFailure;

export function selectServerRequest(server: string, version?: string, fetchVersion = true, changeServer = false): ISelectServer {
	return {
		type: SERVER.SELECT_REQUEST,
		server,
		version,
		fetchVersion,
		changeServer
	};
}

export function selectServerSuccess(server: string, version: string): ISelectServerSuccess {
	return {
		type: SERVER.SELECT_SUCCESS,
		server,
		version
	};
}

export function selectServerFailure(): Action {
	return {
		type: SERVER.SELECT_FAILURE
	};
}

export function serverRequest(server: string, username: string | null = null, fromServerHistory = false): IServer {
	return {
		type: SERVER.REQUEST,
		server,
		username,
		fromServerHistory
	};
}

export function serverSuccess(): Action {
	return {
		type: SERVER.SUCCESS
	};
}

export function serverFailure(err: any): IServerFailure {
	return {
		type: SERVER.FAILURE,
		err
	};
}

export function serverInitAdd(previousServer: string): IServerInit {
	return {
		type: SERVER.INIT_ADD,
		previousServer
	};
}

export function serverFinishAdd(): Action {
	return {
		type: SERVER.FINISH_ADD
	};
}