const chalk = require('chalk');
const meow = require('meow');

const fullHelp = () => meow(`
	Usage
		$ sshc <options>				Para fazer o login ou efetuar um cadastro
		$ sshc <server alias> 				Conecta a um servidor
		$ sshc key [help|list|import|del|link|unlink]	Cadastra/Deleta/Lista/Associa chaves de acesso
		$ sshc server [help|list|add|del]		Cadastra/Deleta/Lista servidores
	Options
		--login	 	Login in SSHChain
		--rlogin	Renew login session
		--register	Register in SSHChain
		--logout 	Purge cached API response and user session
		
		--phone		Cadastra um numero de celular na conta
		--mfa		Retorna o status da autenticação multifator (MFA)
		--enable-mfa	Ativa a autenticação multifator (MFA)
		--disable-mfa	Desativa a autenticação multifator (MFA)
	Examples
		$ sshc key help
		$ sshc key list <criterio de busca> -g <nome grupo>
		$ sshc key import -n <nome chave> ~/.ssh/id_rsa ~/.ssh/id_rsa.pub
		$ sshc key link <nome chave> -s <server alias>
		$ sshc key unlink -s <server alias>
		$ sshc key del <nome chave>

		$ sshc server help
		$ sshc server list <criterio de busca>
		$ sshc server add -n <nome server> -a <server alias> -h 127.0.0.1:22 -u <username> [-k|--key] -d "Descrição opcional"
		$ sshc server del <server alias>
	`, {
	flags: {
		key: {
			type: 'boolean',
			alias: 'h'
		}
	}
});


const keysUsage = () => meow(`
	${chalk.cyan('Manual de chaves')}

	Usage
		$ sshc key [ls|list] <criterio de busca> 	Lista as chaves cadastradas
		$ sshc key import 			Importa uma chave a partir do arquivo em disco
		$ sshc key [del|delete]			Exclui uma chave
		$ sshc key [link|unlink]		Associa/Desassocia uma chave a um servidor ou grupo
	Options
		-n, --name	Nome/Alias da chave, permitido apenas os caracteres [a-Z 0-9 - _ .]
		-s		Server alias
		-g		Group alias
	Examples
		$ sshc key import -n <nome chave> ~/.ssh/id_rsa ~/.ssh/id_rsa.pub
		$ sshc key link <nome chave> [-s|-g] <server alias|nome grupo>
		$ sshc key unlink -s <server alias>
		$ sshc key del <nome chave>
`);

const serverUsage = () => meow(`
	${chalk.cyan('Manual de Servidores')}

	Usage
		$ sshc <server alias>		Conecta a um servidor
		$ sshc server [ls|list] <criterio de busca> -g <nome grupo>	Lista os servidores cadastrados
		$ sshc server add <options>	Cadastra um novo servidor
		$ sshc server [del|delete]	Exclui um servidor
	Options
		-n, --name		Nome de exibição
		-a, --alias		Nome/Alias da chave, permitido apenas os caracteres [a-Z 0-9 - _ .]
		-h, --host		Host do servidor com ou sem a porta
		-p, --port		Porta do servidor
		-u, --username		Nome de usuario do servidor
		--pass, --password	Vai exibir um input para digitar a senha
		-k			Alias da chave para associação,
		--key			Exibe um select com as chaves cadastradas para associação,
		-d, --description	Curta descrição
	Examples
		$ sshc server help
		$ sshc server list
		$ sshc server add -n <nome server> -a <server alias> -h 127.0.0.1:22 -u <username> [-k|--key] -d "Descrição opcional"
		$ sshc server del <server alias>
`);

const groupsUsage = () => meow(`
	${chalk.cyan('Manual de grupos')}
	${chalk.blue('Os servidores associados a grupo herdam configurações de conexão.')}

	Usage
		$ sshc group [ls|list] <criterio de busca> 	Lista grupos cadastrados
		$ sshc group [del|delete]			Exclui um grupo
		$ sshc group [link|unlink]			Associa/Desassocia um servidor ao grupo
	Options
		-n, --name		Nome/Alias do grupo, permitido apenas os caracteres [a-Z 0-9 - _ .]
		-p, --port		Porta do servidor
		-u, --username		Nome de usuario do servidor
		--pass, --password	Vai exibir um input para digitar a senha
		-k			Alias da chave para associação,
		--key			Exibe um select com as chaves cadastradas para associação
	Examples
		$ sshc group link <nome grupo> <server alias>
		$ sshc group unlink <server alias>
		$ sshc group del <nome grupo>
`)

module.exports = {
	help: fullHelp,
	keysUsage: keysUsage,
	serverUsage: serverUsage,
	groupsUsage: groupsUsage
}