﻿unit configuracion;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, FireDAC.Stan.Intf, FireDAC.Stan.Option,
  FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool,
  FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Phys.MySQL, FireDAC.Phys.MySQLDef, FireDAC.VCLUI.Wait,
  FireDAC.Comp.Client, Data.DB;

type
  Tfconfiguracion = class(TForm)
    lblHost: TLabel;
    edHost: TEdit;
    lblUser: TLabel;
    edUser: TEdit;
    lblPass: TLabel;
    edPass: TEdit;
    lblDB: TLabel;
    edDB: TEdit;
    lblMesa: TLabel;
    edMesa: TEdit;
    lblBascula: TLabel;
    edBascula: TEdit;
    lblPuerto: TLabel;
    edPuerto: TEdit;
    lblTipoBascula: TLabel;
    cbTipoBascula: TComboBox;
    chkPreguntarLimpiadora: TCheckBox;
    chkReplicacion: TCheckBox;
    btnGuardar: TButton;
    btnCancelar: TButton;
    procedure btnGuardarClick(Sender: TObject);
    procedure btnCancelarClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    FINIFileName: string;
    procedure CargarConfiguracion;
    procedure CargarModelosBasculas;
  public
    property INIFileName: string read FINIFileName write FINIFileName;
  end;

var
  fconfiguracion: Tfconfiguracion;

implementation

{$R *.dfm}

procedure Tfconfiguracion.FormShow(Sender: TObject);
begin
  CargarModelosBasculas;
  CargarConfiguracion;
end;

procedure Tfconfiguracion.CargarModelosBasculas;
var
  LConn: TFDConnection;
  LQ: TFDQuery;
begin
  cbTipoBascula.Items.Clear;
  
  LConn := TFDConnection.Create(nil);
  LQ := TFDQuery.Create(nil);
  try
    LConn.Params.Clear;
    LConn.Params.Add('DriverID=MySQL');
    LConn.Params.Add('Server=' + edHost.Text);
    LConn.Params.Add('User=' + edUser.Text);
    LConn.Params.Add('Password=' + edPass.Text);
    LConn.Params.Add('Database=' + edDB.Text);
    LConn.LoginPrompt := False;
    
    try
      LConn.Connected := True;
      LQ.Connection := LConn;
      LQ.SQL.Text := 'SELECT id, descripcion FROM modelos_basculas ORDER BY id';
      LQ.Open;
      while not LQ.Eof do
      begin
        cbTipoBascula.Items.AddObject(LQ.FieldByName('descripcion').AsString, TObject(LQ.FieldByName('id').AsInteger));
        LQ.Next;
      end;
    except
      // Si falla la red, cargar del caché local o valores por defecto
      cbTipoBascula.Items.AddObject('Estándar +/- (Buffer 8)', TObject(0));
      cbTipoBascula.Items.AddObject('Modelo Tipo 1 (0/'')', TObject(1));
      cbTipoBascula.Items.AddObject('RxChar Directo (Tipo 2)', TObject(2));
      cbTipoBascula.Items.AddObject('RxChar Directo (Tipo 3)', TObject(3));
      cbTipoBascula.Items.AddObject('Modelo Tipo 4 (+/- Buffer 8)', TObject(4));
      cbTipoBascula.Items.AddObject('Modelo Tipo 5 (+/- Buffer 7)', TObject(5));
      cbTipoBascula.Items.AddObject('Báscula Dibal Don Ciro (Tipo 10)', TObject(10));
    end;
  finally
    LQ.Free;
    LConn.Free;
  end;
end;

procedure Tfconfiguracion.CargarConfiguracion;
var
  F: TextFile;
  sLine: string;
  lines: TStringList;
  i, LIndex: Integer;
  LTargetID: Integer;
begin
  if not FileExists(FINIFileName) then
    Exit;
    
  lines := TStringList.Create;
  try
    AssignFile(F, FINIFileName);
    Reset(F);
    while not Eof(F) do
    begin
      ReadLn(F, sLine);
      lines.Add(sLine);
    end;
    CloseFile(F);
    
    if lines.Count >= 10 then
    begin
      edHost.Text := lines[0];
      edUser.Text := lines[1];
      edPass.Text := lines[2];
      edMesa.Text := lines[3];
      edBascula.Text := lines[4];
      edPuerto.Text := lines[5];
      
      LTargetID := StrToIntDef(lines[6], 0);
      LIndex := -1;
      for i := 0 to cbTipoBascula.Items.Count - 1 do
      begin
        if Integer(cbTipoBascula.Items.Objects[i]) = LTargetID then
        begin
          LIndex := i;
          break;
        end;
      end;
      cbTipoBascula.ItemIndex := LIndex;
      
      chkPreguntarLimpiadora.Checked := lines[7] = '1';
      chkReplicacion.Checked := lines[8] = '1';
      edDB.Text := lines[9];
    end;
  finally
    lines.Free;
  end;
end;

procedure Tfconfiguracion.btnGuardarClick(Sender: TObject);
var
  F: TextFile;
  LTipoBasculaID: Integer;
begin
  LTipoBasculaID := 0;
  if cbTipoBascula.ItemIndex <> -1 then
    LTipoBasculaID := Integer(cbTipoBascula.Items.Objects[cbTipoBascula.ItemIndex]);

  AssignFile(F, FINIFileName);
  Rewrite(F);
  try
    WriteLn(F, edHost.Text);
    WriteLn(F, edUser.Text);
    WriteLn(F, edPass.Text);
    WriteLn(F, edMesa.Text);
    WriteLn(F, edBascula.Text);
    WriteLn(F, edPuerto.Text);
    WriteLn(F, IntToStr(LTipoBasculaID));
    if chkPreguntarLimpiadora.Checked then WriteLn(F, '1') else WriteLn(F, '0');
    if chkReplicacion.Checked then WriteLn(F, '1') else WriteLn(F, '0');
    WriteLn(F, edDB.Text);
  finally
    CloseFile(F);
  end;
  
  ModalResult := mrOk;
end;

procedure Tfconfiguracion.btnCancelarClick(Sender: TObject);
begin
  ModalResult := mrCancel;
end;

end.
