unit uEditorLogin;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, cxGraphics, cxControls,
  cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxDropDownEdit,
  cxImageComboBox, ImgList, PngImageList, pngimage, ToolWin, JvExControls,
  JvComponent, JvGradient, JvGIF, JvComponentBase, JvFormPlacement,
  JvAppStorage, JvAppRegistryStorage, uIEditorLogin, uUsuariosController;

type
  TfEditorLogin = class(TForm, IEditorLogin)
    Panel1: TPanel;
    Label3: TLabel;
    Label4: TLabel;
    edtPassword: TEdit;
    bAceptar: TButton;
    bCancelar: TButton;
    Label1: TLabel;
    edtUser: TEdit;
    JvGradient1: TJvGradient;
    Button1: TButton;
    Timer1: TTimer;
    JvAppRegistryStorage1: TJvAppRegistryStorage;
    JvFormStorage1: TJvFormStorage;
    Image1: TImage;
    procedure bAceptarClick(Sender: TObject);
    procedure ToolButton4Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure edtUserKeyPress(Sender: TObject; var Key: Char);
  private
    FController : IUsuariosController;
    FIntentos : Integer;
    function GetController : IUsuariosController;
    procedure SetController (const AValue : IUsuariosController);
  published
    property Controller : IUsuariosController read GetController write SetController;
  end;
  

implementation

uses
  uFactuGES_App, uDataModuleConexion;

{$R *.dfm}

{
********************************* TfEditorLogin **********************************
}
procedure TfEditorLogin.bAceptarClick(Sender: TObject);
var
  bOk : Boolean;
begin
  Timer1.Enabled := False;
  
  ShowHourglassCursor;
  try
    bOK := FController.ComprobarUsuario(edtUser.Text, edtPassword.Text);
  finally
    HideHourglassCursor;
  end;

  if bOk then
    ModalResult := mrOK
  else begin
    Application.MessageBox('Usuario no válido. Compruebe si ha escrito correctamente'
      + #13 + #10 + 'el usuario y la contraseña.', 'Atención', MB_OK);
    Inc(FIntentos);
    if (Controller.MaxIntentosLogin > 0) and (FIntentos = Controller.MaxIntentosLogin) then
      ModalResult := mrCancel;
  end;
end;

procedure TfEditorLogin.ToolButton4Click(Sender: TObject);
var
  ATimer : Boolean;
begin
  ATimer := False;
  if Timer1.Enabled then
  begin
    ATimer := True;
    Timer1.Enabled := False;
  end;

  dmConexion.ConfigurarConexion;

  if ATimer then
    Timer1.Enabled := True;
end;

procedure TfEditorLogin.edtUserKeyPress(Sender: TObject; var Key: Char);
begin
  // Desactivar el timer si el usuario escribe algo
  Timer1.Enabled := False;
end;

procedure TfEditorLogin.FormCreate(Sender: TObject);
begin
  FIntentos := 0;
end;

procedure TfEditorLogin.FormDestroy(Sender: TObject);
begin
  FController := NIL;
end;

procedure TfEditorLogin.FormShow(Sender: TObject);
begin
  Self.Caption := AppFactuGES.AppFullName;
  JvFormStorage1.RestoreFormPlacement;

  // Hacer login automática si hay usuario/password y no hay más de una base
  // de datos como opción para conectarse.
  if ((Length(edtUser.Text) > 0) and (Length(edtPassword.Text) > 0)) then
    Timer1.Enabled := True;
end;

function TfEditorLogin.GetController: IUsuariosController;
begin
  Result := FController;
end;

procedure TfEditorLogin.SetController(const AValue: IUsuariosController);
begin
  FController := AValue;
end;

procedure TfEditorLogin.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False;
  bAceptar.Click;
end;

end.
