local createCarre = require('/apis/libcarre');
local createVersion = require('/apis/libversion');

-- Les arguments du programme sont disponibles dans `...`.
-- `table.pack` permet de les garder dans une table facile a parcourir.
local args = table.pack(...);

local function printUsage()
  print('carre usage:');
  print();
  print('  carre');
  print('  carre -size <n> [-x <n>] [-y <n>] [-char <c>] [-fill] [-clear]');
  print('  carre -random [-count <n>] [-delay <s>] [-clear]');
  print('  carre --version');
  print('  carre --help');
  print();
  print('exemples:');
  print('  carre -size 10 -char * -clear');
  print('  carre -size 6 -fill -x 4 -y 3');
  print('  carre -random -count 5 -delay 0.2');
end

local command = args[1];

if command == '-help' or command == '--help' or command == 'help' then
  printUsage();
  return;
end

if command == '-version' or command == '--version' or command == 'version' then
  print('v' .. createVersion().forSelf());
  return;
end

local carre = createCarre();
local config, err = carre.parseArgs(args);
if not config then
  print(err);
  print('utilise: carre -help');
  return;
end

local width, height = term.getSize();

for index = 1, config.count do
  if config.clear then
    term.clear();
  end

  -- Le calcul choisit une position visible. Si rien n'est donne,
  -- le carre est centre dans le terminal.
  local square = carre.computeSquare(config, width, height);

  -- Le mode contour ecrit seulement les bords. Le mode plein ecrit partout.
  carre.drawSquare(term.current(), square);

  if config.delay > 0 and index < config.count then
    sleep(config.delay);
  end
end

term.setCursorPos(1, height);
