using File_Watcher.Models;

namespace File_Watcher.Helpers;

internal static partial class HelperWaferCounter
{

    internal static bool MoveFile(AppSettings appSettings, ILogger<Worker> logger)
    {
        string[] files;
        string checkFile;
        FileInfo fileInfo;
        string checkDirectory;
        string[] directories = Directory.GetDirectories(appSettings.WatchDirectory, "*", SearchOption.TopDirectoryOnly);
        foreach (string directory in directories)
        {
            checkDirectory = !appSettings.WaferCounterConfiguration.MatchPath ? appSettings.WaferCounterConfiguration.Destination : Path.Combine(appSettings.WaferCounterConfiguration.Destination, Path.GetFileName(directory));
            try
            {
                if (!Directory.Exists(checkDirectory))
                    _ = Directory.CreateDirectory(checkDirectory);
                files = Directory.GetFiles(directory, "*", SearchOption.TopDirectoryOnly);
                foreach (string file in files)
                {
                    fileInfo = new(file);
                    if (new TimeSpan(DateTime.Now.Ticks - fileInfo.LastWriteTime.Ticks).TotalMilliseconds < appSettings.MillisecondsDelay)
                        continue;
                    checkFile = Path.Combine(checkDirectory, Path.GetFileName(file));
                    if (File.Exists(checkFile))
                        continue;
                    try
                    { File.Move(file, checkFile); }
                    catch (Exception ex)
                    { logger.LogError(ex, "Inner loop error!"); }
                }
            }
            catch (Exception ex)
            { logger.LogError(ex, "Loop error!"); }
        }
        return true;
    }

}