package com.javarush.test.level16.lesson13.home10;

import java.io.*;
import java.util.Scanner;

/* Последовательный вывод файлов
1. Разберись, что делает программа.
2. В статическом блоке считай 2 имени файла firstFileName и secondFileName.
3. Внутри класса Solution создай нить public static ReadFileThread, которая реализует
интерфейс ReadFileInterface (Подумай, что больше подходит - Thread или Runnable).
3.1. Метод setFileName должен устанавливать имя файла, из которого будет читаться содержимое.
3.2. Метод getFileContent должен возвращать содержимое файла.
3.3. В методе run считай содержимое файла, закрой поток. Раздели пробелом строки файла.
4. Подумай, в каком месте нужно подождать окончания работы нити, чтобы обеспечить последовательный вывод файлов.
4.1. Для этого добавь вызов соответствующего метода.
Ожидаемый вывод:
[все тело первого файла]
[все тело второго файла]
*/

public class Solution {
    public static String firstFileName;
    public static String secondFileName;

    static {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        try
        {
            firstFileName = reader.readLine();
            secondFileName = reader.readLine();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws InterruptedException {
        systemOutPrintln(firstFileName);
        systemOutPrintln(secondFileName);
    }

    public static void systemOutPrintln(String fileName) throws InterruptedException {
        ReadFileInterface f = new ReadFileThread();
        f.setFileName(fileName);
        f.start();
        f.join();
        System.out.println(f.getFileContent());
    }

    public static interface ReadFileInterface {

        void setFileName(String fullFileName);

        String getFileContent();

        void join() throws InterruptedException;

        void start();
    }

    public static class ReadFileThread extends Thread implements ReadFileInterface {


        String fileName;
        String fileContent;

        @Override
        public void setFileName(String fileName)
        {
            this.fileName = fileName;
        }

        @Override
        public String getFileContent()
        {
            return fileContent;
        }

        public void run() {


            try
            {
                StringBuilder stringBuilder = new StringBuilder();
                File scFile = new File(fileName);
                Scanner scanner = new Scanner(scFile);
                while(scanner.hasNext()) {
                    stringBuilder.append(scanner.next());
                    stringBuilder.append(" ");
                }
                fileContent = (stringBuilder.toString().trim());
            }
            catch (FileNotFoundException e)
            {
                e.printStackTrace();
            }
        }
    }
}