package com.codegym.task.task31.task3101;

/*
Iterating through a file tree
*/

import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

/***
 * Listar todos los ficheros de un directorio y de sus subdirectorios
 */

public class Solution {

    public Map<String, File> fileList = new TreeMap<>();

    public static void main(String[] args) throws Exception{
        Solution solution = new Solution();
        String path = args[0]; // ruta al directorio
        File directorio = new File(path);

        solution.listAllFilesAndDirs(directorio);

        File resultFile = new File(args[1]);
        File dest = new File(resultFile.getParentFile() + "/allFilesContent.txt");
        if (FileUtils.isExist(dest)) {
            FileUtils.deleteFile(dest);
        }
        FileUtils.renameFile(resultFile, dest);

        BufferedWriter bufferedOutput = new BufferedWriter(new FileWriter(dest));
        List<File> listaFiles = new ArrayList<>();
        solution.fileList.forEach((k,v)-> listaFiles.add(new File((v.toString() + "/" +  k.toString()))));

        for (File e : listaFiles){
            BufferedReader bufferedReader = new BufferedReader(new FileReader(e));
            while (bufferedReader.ready()){
                String line = bufferedReader.readLine();
                bufferedOutput.write(line);
            }
            bufferedOutput.write("\n");
        }
        bufferedOutput.close();

    }

    public void listAllFilesAndDirs(File directorio) {

        for (File e : directorio.listFiles()){
            if (e.isDirectory()){
                listAllFilesAndDirs(e);
            }else{
                if (e.length() <= 50) {
                    if (e.getAbsolutePath().contains("allFilesContent.txt")) continue;
                    File file = new File(e.getAbsolutePath());
                    fileList.put(e.getName(), new File(file.getParent()));
                }
            }
        }

    }
}