using Microsoft.Extensions.Logging;

namespace File_Folder_Helper.Helpers;

internal static class HelperRenameToOldMoveDeleteOldMerge
{

    internal static void RenameToOldMoveDeleteOld(ILogger log, string argsZero)
    {
        string checkDirectory = argsZero[0..^1];
        if (!Directory.Exists(checkDirectory))
            log.LogInformation("<{checkDirectory}> doesn't exist!", checkDirectory);
        else
        {
            string renameFile;
            string destinationFile;
            List<string> deleteFiles = [];
            string[] moveFiles = Directory.GetFiles(argsZero, "*", SearchOption.TopDirectoryOnly);
            log.LogInformation("<{moveFiles.Length}> to move", moveFiles.Length);
            foreach (string moveFile in moveFiles)
            {
                destinationFile = string.Concat(checkDirectory, moveFile[argsZero.Length..]);
                if (!File.Exists(destinationFile))
                    File.Move(moveFile, destinationFile);
                else
                {
                    renameFile = Path.ChangeExtension(destinationFile, string.Concat(Path.GetExtension(destinationFile), ".old"));
                    File.Move(destinationFile, renameFile);
                    File.Move(moveFile, destinationFile);
                    deleteFiles.Add(renameFile);
                }
            }
            log.LogInformation("<{deleteFiles.Count}> to delete", deleteFiles.Count);
            foreach (string deleteFile in deleteFiles)
            {
                for (short i = 0; i < short.MaxValue; i++)
                {
                    try
                    {
                        File.Delete(deleteFile);
                        break;
                    }
                    catch (Exception) { }
                    Thread.Sleep(500);
                }
            }
        }
    }

}