unit uclusterconf_formulario;

{$mode delphi}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  StdCtrls, Buttons, uclusterconfig;

type

  { TFormConfiguracionPerfilesSSH }

  TFormConfiguracionPerfilesSSH = class(TForm)
    btAgregarPerfil: TBitBtn;
    btClonarPerfil: TBitBtn;
    btEliminarPerfil: TBitBtn;
    btGuardar: TBitBtn;
    btIngresar: TButton;
    cbPerfil: TComboBox;
    eArchivoClavePrivada: TLabeledEdit;
    eEmail: TLabeledEdit;
    eHost: TLabeledEdit;
    eUsuario: TLabeledEdit;
    GroupBox1: TGroupBox;
    eParticion: TLabeledEdit;
    lblPerfil: TLabel;
    Panel3: TPanel;
    procedure btAgregarPerfilClick(Sender: TObject);
    procedure btClonarPerfilClick(Sender: TObject);
    procedure btEliminarPerfilClick(Sender: TObject);
    procedure btGuardarClick(Sender: TObject);
    procedure btIngresarClick(Sender: TObject);
    procedure cbPerfilEditingDone(Sender: TObject);
    procedure cbPerfilSelect(Sender: TObject);
  private

  public
    cluster_cfg: TClusterConfigRec;
    procedure SetPerfilInfo(kPerfil: integer);
    procedure GetPerfilInfo(aPerfil: TClusterConfigPerfil );
    procedure LoadConfig;
    procedure SaveConfig;
  end;

var
  FormConfiguracionPerfilesSSH: TFormConfiguracionPerfilesSSH;

implementation

{$R *.lfm}

{ TFormConfiguracionPerfilesSSH }

procedure TFormConfiguracionPerfilesSSH.btIngresarClick(Sender: TObject);
begin
  SaveConfig;
  ModalResult:= 1;
end;

procedure TFormConfiguracionPerfilesSSH.btAgregarPerfilClick(Sender: TObject);
var
  aPerfil: TClusterConfigPerfil;
  orgName: string;
  kDup: integer;
begin
  aPerfil:= TClusterConfigPerfil.CreateDefault;
  orgName:= aPerfil.nombrePerfil;
  kDup:= 0;
  while cluster_cfg.GetPerfil( aPerfil.nombrePerfil ) <> nil do
  begin
    inc( kDup );
    aPerfil.nombrePerfil:= orgName+'_'+IntToStr(kDup);
  end;
  cluster_cfg.perfiles.add( aPerfil );
  cluster_cfg.kPerfilActivo:= cluster_cfg.perfiles.count-1;
  cbPerfil.Items:= cluster_cfg.NombresPerfiles;
  SetPerfilInfo( cluster_cfg.kPerfilActivo  );
end;

procedure TFormConfiguracionPerfilesSSH.btClonarPerfilClick(Sender: TObject);
var
  aPerfil: TClusterConfigPerfil;
  orgName: string;
  kDup: integer;
begin
  aPerfil:= cluster_cfg.PerfilActivo.CreateClone;
  orgName:= aPerfil.nombrePerfil;
  kDup:= 0;
  while cluster_cfg.GetPerfil( aPerfil.nombrePerfil ) <> nil do
  begin
    inc( kDup );
    aPerfil.nombrePerfil:= orgName+'_'+IntToStr(kDup);
  end;
  cluster_cfg.perfiles.add( aPerfil );
  cluster_cfg.kPerfilActivo:= cluster_cfg.perfiles.count-1;
  cbPerfil.Items:= cluster_cfg.NombresPerfiles;
  SetPerfilInfo( cluster_cfg.kPerfilActivo  );
end;

procedure TFormConfiguracionPerfilesSSH.btEliminarPerfilClick(Sender: TObject);
var
  k: integer;
  aPerfil: TClusterConfigPerfil;
begin
  if Cluster_cfg.perfiles.count = 1 then
  begin
    ShowMessage( 'No es posible borrar el último perfil.' );
    exit;
  end;
  k:= Cluster_cfg.kPerfilActivo;
  aPerfil:= Cluster_cfg.perfiles[ k ];
  aPerfil.Free;
  Cluster_cfg.perfiles.Delete( k );
  if k >= Cluster_cfg.perfiles.count then dec( k );
  Cluster_cfg.kPerfilActivo:= k;
  cbPerfil.Items:= Cluster_cfg.NombresPerfiles;
  SetPerfilInfo( k );
end;

procedure TFormConfiguracionPerfilesSSH.btGuardarClick(Sender: TObject);
begin
  cluster_cfg.Save;
end;


procedure TFormConfiguracionPerfilesSSH.cbPerfilEditingDone(Sender: TObject);
begin
  cluster_cfg.PerfilActivo.nombrePerfil:= cbPerfil.Caption;
  cbPerfil.Items[ cluster_cfg.kPerfilActivo ]:= cbPerfil.Caption;
  cbPerfil.ItemIndex:= cluster_cfg.kPerfilActivo;
end;

procedure TFormConfiguracionPerfilesSSH.cbPerfilSelect(Sender: TObject);
begin
  cluster_cfg.kPerfilActivo:= cbPerfil.ItemIndex;
  SetPerfilInfo( cbPerfil.ItemIndex );
end;



procedure TFormConfiguracionPerfilesSSH.SetPerfilInfo(kPerfil: integer);
var
  aPerfil: TClusterConfigPerfil;
begin
  aPerfil := self.cluster_cfg.perfiles[kPerfil];
  eUsuario.Text := aPerfil.Usuario;
  eEmail.Text := aPerfil.email;
  eArchivoClavePrivada.text := aPerfil.archiPrivateKey;
  eHost.Text:= aPerfil.host;
  eParticion.Text := aPerfil.particion;
  cbPerfil.ItemIndex := kPerfil;
  cbPerfil.Caption:= aPerfil.NombrePerfil;
end;

procedure TFormConfiguracionPerfilesSSH.GetPerfilInfo(aPerfil: TClusterConfigPerfil);
begin
  aPerfil.nombrePerfil := cbPerfil.Caption;
  aPerfil.Usuario := eUsuario.Text;
  aPerfil.email:= eEmail.Text;
  aPerfil.archiPrivateKey:= eArchivoClavePrivada.text;
  aPerfil.host:= eHost.Text;
  aPerfil.particion:= eParticion.Text;
end;


procedure TFormConfiguracionPerfilesSSH.LoadConfig;
begin
  cluster_cfg := uclusterconfig.get_Cluster_cfg;
  cbPerfil.Items := cluster_cfg.NombresPerfiles;
  SetPerfilInfo( cluster_cfg.kPerfilActivo );
end;


procedure TFormConfiguracionPerfilesSSH.SaveConfig;
begin
  //  oddface_cfg:= get_OddFace_cfg;
  cluster_cfg.kPerfilActivo := cbPerfil.ItemIndex;
  GetPerfilInfo( cluster_cfg.Perfiles[cbPerfil.ItemIndex]);
  cluster_cfg.Save;
end;


end.

