package pt.utl.ist.fenix.tools.scripts;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.joda.time.DateTime;

import pt.utl.ist.fenix.tools.util.FileUtils;

public class RegisterSQLScript {

    public static void main(String[] args) {
        final File baseDir = new File(args[0]);
        if (!baseDir.exists()) {
            System.err.println("Base directory of sql scripts: " + args[0] + " does not exist!");
        } else if (baseDir.isDirectory()) {
            System.err.println("Base directory of sql scripts: " + args[0] + " is not a directory!");
        } else {
            final File file = new File(args[1]);
            if (!file.exists()) {
                System.err.println("File: " + args[1] + " does not exist!");
            } else if (!file.isFile()) {
                System.err.println("File: " + args[1] + " is not a file!");
            } else {
                final DateTime dateTime = new DateTime();
                final String destinationDirName = getDestinationDir(baseDir, dateTime);
                final File destinationDir = new File(destinationDirName);
                if (!destinationDir.exists()) {
                    destinationDir.mkdirs();
                }
                final String destinationFileName = getDestinationFile(destinationDir, dateTime, file);
                final File destinationFile = new File(destinationFileName);
                if (destinationFile.exists()) {
                    System.out.println("File " + destinationFileName + " already exists!");
                } else {
                    try {
                        final FileInputStream fileInputStream = new FileInputStream(file);
                        final FileOutputStream fileOutputStream = new FileOutputStream(destinationFile);
                        FileUtils.copy(fileInputStream, fileOutputStream);
                    } catch (final IOException ex) {
                        ex.printStackTrace();
                    }
                }
            }
        }
        System.exit(0);
    }

    private static String getDestinationFile(final File destinationDir, final DateTime dateTime, final File file) {
        return destinationDir.getAbsolutePath() + File.separatorChar + dateTime.toString("yyyyMMddHHmmss") + "_" + file.getName();
    }

    private static String getDestinationDir(final File baseDir, final DateTime dateTime) {
        final int year = dateTime.getYear();
        final int month = dateTime.getMonthOfYear();
        final int day = dateTime.getDayOfMonth();
        return baseDir.getAbsolutePath() + File.separatorChar + "R" + year + File.separatorChar + "R" + year + "-" + month
                + File.separatorChar + "R" + year + "-" + month + "-" + day;
    }

}
