# ==============================================================================
"""COUNT : print the number of lines, words and chars in a set of text files"""
# ==============================================================================
__author__  = "Christophe Schlick modified by Philippe Blasi"
__version__ = "1.0"
__date__    = "2022-11-12"
__usage__   = """
User input : <filename> [filename ...]
App output : number of lines, words and chars for each provided file"""
# ==============================================================================
from ezCLI import *
# ------------------------------------------------------------------------------
def count(name:str) -> str:
  """return the number of lines, words and chars stored in file 'name'"""

  # lire le fichier name dans une chaine de caractère
  try:
    txt = read_txt(name)
  except OSError:
    return f"{name} : cannot read file"
    
  # extraire de la chaine le nombre de lettres, mots et lignes
  nb_char = len(txt)
  nb_word = len(txt.split())
  nb_line = len(txt.split('\n')) 

  # renvoyer la chaine de caractère formatée contetant :
  # "nom du fichier : lines = ___, words = ___, chars = _____"
  return f"{name} : lines = {nb_line}, words = {nb_word}, chars = {nb_char}"

# ------------------------------------------------------------------------------
def parser_bis(command:str) -> str:
  """parse 'command' and return line/word/char counters for provided files"""
  # regarder combien de nom de fichier fichier contient command
  # ==> spliter command et regarder la longueur
  l = command.split()
  
  res = ''
  
  # s'il y a plusieurs fichier, faire une boucle, appeler count pour chaque fichier
  # et rassemble le resultat en une seule chaine
  
  for name in l:
    res += count(name) + '\n'
    
  return res
# ------------------------------------------------------------------------------
def parser(command:str) -> str:
  """parse 'command' and return line/word/char counters for provided files"""
  tuple_name = parse(command) ; inspect()
  if type(tuple_name) is str:
    res = count(tuple_name)
  else:
    result = ''
    # pour chaque fichier, appeler count et ajouter le résultat à une chaine
    # de caractère en revenant à la ligne ('\n') entre chaque appel
    for name in tuple_name:
      result += count(name) + '\n'

    # version avec création d'un tableau de chaines de charactère
    #tab_res=[count(name) for name in tuple_name] ; inspect()
    #res = "\n".join(tab_res)

  return res 
# ==============================================================================
if __name__ == '__main__':
  userloop(parser, "Enter <filename> [filename ...]")
# ==============================================================================
