# Interface do módulo {gera_html_form}.

# As funções desta interface retornam cadeias de caracteres que são
# fragmentos de código HTML5 que definem formularios <form>...</form>.

# Para devolver um destes formulários ao browser do usuário,
# é necessário acrescentar pelo menos um cabeçalho e rodapé HTML;
# por exeplo incluindo-o como conteúdo de {gera_html_pag.generica}.

# Implementação desta interface:
import gera_html_form_IMP

# Funções exportadas por este módulo:

def buscar_objeto():
  """Retorna HTML de um formulario para busca textual de objetos.
  O formulário contém um campo editável onde o usuário entra a palavra a
  procurar, e um botão de 'Buscar' que solicita a busca ao servidor."""
  return gera_html_form_IMP.buscar_objeto()
  
def entrar():
  """Retorna o HTML do formulário para login do usuário.
  O formulário contém campos editáveis onde o usuário deverá digitar
  o email e a senha, e um botão 'Entrar' (de tipo 'submit').

  Quando o usuário clicar no botão 'Entrar', será emitido um comando POST
  com ação {fazer_login}.  Os argumentos desse
  POST são { 'email': {email}, 'senha': {senha} }."""
  return gera_html_form_IMP.entrar()

def cadastrar_usuario(atrs, admin):
  """Retorna o formulário de cadastrar novo usuario.

  O formuláro contém campos editáveis para as informações que o usuário
  deve preencher.  Se {atrs} não for {None}, deve ser um dicionário
  que define os valores iniciais dos campos.

  O parâmetro {admin} diz que o usuário que pediu a criação do usuário
  (NÃO o usuário que está sendo cadastrado!) é administrador. Se for {True}, o
  formulário vai mostrar um checkbox para definir o novo usuário como
  administrador.

  O formulário conterá um botão 'Cadastrar' (de tipo 'submit').
  Quando o usuário clicar nesse botão, será emitido um comando POST com ação
  {cadastrar_usuario}.  Os argumentos desse POST são todos os atributos da classe {ObjUsuario},
  com os valores de {atrs} que o usuário deve ter preenchido.  Um argumento
  adicional 'conf_senha' conterá a confirmação de senha.

  O formulário também terá um botão simples 'Cancelar',
  que, quando clicado, emite o comando 'principal'."""
  return gera_html_form_IMP.cadastrar_usuario(atrs, admin)

def alterar_usuario(id_usuario, atrs, admin):
  """Retorna o formulário de alterar dados da conta
  do usuario {usr} cujo identificador é {id_usuario}.

  O formuláro contém campos editáveis com os atributos
  correntes do usuário, especificados no dicionário {atrs}.
  O valor de {atrs['senha']} não será mostrado, e haverá um
  campo adicional 'conf_senha'.

  O parâmetro {admin} diz que o usuário que pediu a alteração (NÃO o
  usuário que está sendo alterado!) é administrador. Se for {True}, o
  formulário vai mostrar um checkbox para definir o usuário {usr} como
  administrador, e vai mostrar também o campo {id_usuario} como "readonly".

  Se {admin} for {False}, supõe-se que o formulário foi
  pedido pelo próprio {usr}, que é um cliente comum.

  O formulário conterá um botão 'Alterar' (de tipo 'submit').
  Quando o usuário clicar nesse botão, será emitido um comando POST com ação
  {alterar_usuario}.  Os argumentos desse POST são todos os atributos da classe
  {ObjUsuario}, com os valores de {atrs} a menos de altetações feitas pelo
  usuário, mais o atributo 'conf_senha'.

  O formulário também terá um botão simples 'Cancelar',
  que, quando clicado, emite o comando 'principal'."""
  return gera_html_form_IMP.alterar_usuario(id_usuario, atrs, admin)

def buscar_identificador():
  """Retorna HTML de um formulario para busca textual no identificador do
  cadastro de produtos.  O formulário contém um campo editável onde o usuário entra
  o identificador na forma "{L}-{NNNNNNNN}", onde {L} pode ser "P", "C", "S", ou "U"
  que deseja procurar, e um botão de 'Ver' que solicita o produto ao servidor."""
  return gera_html_form_IMP.buscar_identificador()
