unit ulistadosDocs;

{$mode delphi}
interface

uses
  Classes, SysUtils,
  LCLIntf,
  fileutil,
  uConstantesSimSEE, uInfoTabs, uInfoCosa;

(*
  rch@201910100741
  Creo esta unidad para podre desplegar un listado de las Entidades (Actores y Fuentes)
  disponibles en el Editor y generar la documentación corresondiente.

  En el repositorio de fuentes agregué
*)



procedure GenListado;

implementation


function furldoc(carpetaDocs, archiPlantilla: string; Clase: string;
  idioma: string): string;
var
  archiDoc: string;
  sext: string;

begin
  if archiPlantilla = '' then
    exit;

  if idioma = 'es' then
    sext := ''
  else
    sext := '_' + idioma;

  archiDoc := carpetaDocs + Clase + sext + '.odt';

  (*
  if not fileExists(archiDoc) then
    CopyFile(archiPlantilla, archiDoc);
    *)

  Result := ' <a href="file://' + archiDoc + '">(' + idioma + ')</a>';
end;


procedure Listar_InfoCosas(var sal: textfile; carpetaDocs, archiPlantilla: string);
var
  color_encabezado: string;

  procedure tr_begin(color: string = 'white');
  begin
    writeln(sal, '<tr bgcolor="' + color + '">');
  end;

  procedure tr_end;
  begin
    writeln(sal, '</tr>');
  end;

  procedure wtd(s: string; color: string = 'white');
  begin
    //  write( sal, '<td bgcolor="'+color+'">'+s+'</td>' );
    Write(sal, '<td>' + s + '</td>');
  end;

  procedure Despliegue(lst: TListaInfoCosas; titulo: string);
  var
    aInfoCosa: TInfoCosa;
    k: integer;

  begin
    writeln(sal, titulo + '<br>');
    Write(sal, '<table bgcolor="navy" cellspacing="1" cellpadding="1">');
    tr_begin(color_encabezado);
    wtd('Cosa ID');
    wtd('Descripción');
    tr_end;
    for k := 0 to lst.Count - 1 do
    begin
      tr_begin;
      aInfoCosa := lst[k];
      wtd(aInfoCosa.tipo.ClassName + furldoc(carpetaDocs, archiPlantilla,
        aInfoCosa.tipo.ClassName, 'es') + furldoc(carpetaDocs, archiPlantilla,
        aInfoCosa.tipo.ClassName, 'en'));
      wtd(aInfoCosa.descClase);
      tr_end;
    end;
    writeln(sal, '</table>');
    writeln(sal, '<hr>');
  end;

begin
  color_encabezado := '#FFEEEE';


  if Pos('Plantilla_CronOper.odt', archiPlantilla) > 0 then
  begin
//    Despliegue(InfoIndicesSimRes, 'Indices SimRes');
//    Despliegue(InfoCronVarsSimRes, 'CronVars SimRes');
    Despliegue(InfoCronOpersSimRes, 'ConOpers SimRes');
  end
  else if Pos('Plantilla_PostOper.odt', archiPlantilla) > 0 then
    Despliegue(InfoPostOpersSimRes, 'PostOpers SimRes')
  else if Pos('Plantilla_PrintCronVars.odt', archiPlantilla) > 0 then
    Despliegue(InfoPrintCronVarsSimRes, 'PrintCronVars SimRes')
  else
  begin
    Despliegue(InfoCombustibles, 'Combustibles');
    //  Despliegue( InfoFichasCombustibles, 'Fichas Combustibles' );
    // Despliegue( InfoMonitores, 'Monitores' );
    Despliegue(InfoFuentes, 'Fuentes');
    //  Despliegue( InfoFichasFuentes, 'Fichas Fuentes' );
  end;
end;


procedure Listar_InfoTabs(var sal: textfile; carpetaDocs, archiPlantilla: string);
var
  k: integer;
  lst: TInfoTab;
  color_Encabezado: string;

  procedure tr_begin(color: string = 'white');
  begin
    writeln(sal, '<tr bgcolor="' + color + '">');
  end;

  procedure tr_end;
  begin
    writeln(sal, '</tr>');
  end;

  procedure wtd(s: string; color: string = 'white');
  begin
    //  write( sal, '<td bgcolor="'+color+'">'+s+'</td>' );
    Write(sal, '<td>' + s + '</td>');
  end;


  procedure despliegue(titulo: string; lst: TList);
  var
    aInfoCosa: TInfoCosaConNombre;
    j: integer;

  begin

    writeln(sal, titulo + '<br>');
    Write(sal, '<table bgcolor="navy" cellspacing="1" cellpadding="1">');
    tr_begin(color_encabezado);


    wtd('Clase');
    wtd('Nombre Calse');
    tr_end;

    for j := 0 to lst.Count - 1 do
    begin
      tr_begin;
      aInfoCosa := lst[j];
      wtd(aInfoCosa.clase.ClassName + furldoc(
        carpetaDocs, archiPlantilla, aInfoCosa.clase.ClassName, 'es') +
        furldoc(carpetaDocs, archiPlantilla, aInfoCosa.clase.ClassName, 'en'));
      wtd(aInfoCosa.nombreClase);
      tr_end;
    end;
    writeln(sal, '</table>');
    writeln(sal, '<hr>');

  end;

begin
  color_encabezado := '#FFEEEE';

  writeln(sal, '<hr>InfoTabs ----------------------------<br>');
  for k := 0 to infoTabs_.tabs.Count - 1 do
  begin
    lst := infoTabs_.tabs[k];
    despliegue(lst.nombreTab, lst.infoCosasConNombre);
  end;
end;


procedure GenListado;
var
  archi: string;
  sal: textfile;
  CarpetaDocs, archiPlantilla: string;

begin
  archi := getDir_Tmp + 'infocosas_lsts.html';
  assignfile(sal, archi);
  rewrite(sal);

  writeln(sal, '<html>');
  writeln(sal, '<head>');
  writeln(sal, '</head>');
  writeln(sal, '<body>');

  carpetaDocs := getDir_SimSEE + 'SimSEE_src/src/docs/Traduccion2019/Tomo2_Fuentes/';
  archiPlantilla := carpetaDocs + 'PlantillaFuentes.odt';
  if not FileExists(archiPlantilla) then
    archiPlantilla := '';
  Listar_InfoCosas(sal, carpetaDocs, archiPlantilla);

  carpetaDocs := getDir_SimSEE + 'SimSEE_src/src/docs/Traduccion2019/Tomo3_Actores/';
  archiPlantilla := carpetaDocs + 'PlantillaActor.odt';
  if not FileExists(archiPlantilla) then
    archiPlantilla := '';
  Listar_InfoTabs(sal, CarpetaDocs, archiPlantilla);

  carpetaDocs := getDir_SimSEE + 'SimSEE_src/src/docs/Traduccion2019/Tomo4_SimRes3/CronOpers/';
  archiPlantilla := carpetaDocs + 'Plantilla_CronOper.odt';
  if not FileExists(archiPlantilla) then  archiPlantilla := '';
  Listar_InfoCosas(sal, carpetaDocs, archiPlantilla);

  carpetaDocs := getDir_SimSEE + 'SimSEE_src/src/docs/Traduccion2019/Tomo4_SimRes3/PostOpers/';
  archiPlantilla := carpetaDocs + 'Plantilla_PostOper.odt';
  if not FileExists(archiPlantilla) then  archiPlantilla := '';
  Listar_InfoCosas(sal, carpetaDocs, archiPlantilla);

  carpetaDocs := getDir_SimSEE + 'SimSEE_src/src/docs/Traduccion2019/Tomo4_SimRes3/PrintCronVars/';
  archiPlantilla := carpetaDocs + 'Plantilla_PrintCronVars.odt';
  if not FileExists(archiPlantilla) then  archiPlantilla := '';
  Listar_InfoCosas(sal, carpetaDocs, archiPlantilla);


  writeln(sal, '</body></html>');

  closefile(sal);
  OpenURL('file://' + archi);
end;

end.
