using View_by_Distance.Shared.Models;
using View_by_Distance.Shared.Models.Stateless.Methods;

namespace View_by_Distance.Map.Models.Stateless;

internal abstract class LookForAbandonedLogic
{

    internal static void LookForAbandoned(Property.Models.Configuration propertyConfiguration, List<string> distinctFilteredFileNameFirstSegments, string directory, string directoryName)
    {
        FilePath filePath;
        FileHolder fileHolder;
        string fileNameFirstSegment;
        List<string> renameCollection = [];
        string[] files = Directory.GetFiles(directory, "*", SearchOption.AllDirectories);
        foreach (string file in files)
        {
            fileHolder = IFileHolder.Get(file);
            filePath = FilePath.Get(propertyConfiguration, fileHolder, index: null);
            fileNameFirstSegment = fileHolder.NameWithoutExtension.Split('.')[0];
            if (!filePath.IsIntelligentIdFormat && filePath.SortOrder is null)
                continue;
            if (distinctFilteredFileNameFirstSegments.Contains(fileNameFirstSegment))
                continue;
            renameCollection.Add(file);
        }
        if (renameCollection.Count > 0)
        {
            if (directoryName.Length == 2)
                IDirectory.MoveFiles(renameCollection, directoryName, $"{directoryName[0]}abd{directoryName[^1]}");
            else if (directoryName.Length == 4)
                IDirectory.MoveFiles(renameCollection, directoryName, $"{directoryName[..2]}abd{directoryName[^2..]}");
            else
                throw new NotSupportedException();
        }
    }

    internal static void LookForAbandoned(Property.Models.Configuration propertyConfiguration, string bResultsFullGroupDirectory, List<string> distinctFilteredFileNameFirstSegments)
    {
        string[] directories = Directory.GetDirectories(bResultsFullGroupDirectory, "*", SearchOption.TopDirectoryOnly);
        foreach (string directory in directories)
        {
            string? directoryName = Path.GetFileName(directory);
            if (string.IsNullOrEmpty(directoryName) || (directoryName.Length != 2 && directoryName.Length != 4))
                continue;
            LookForAbandoned(propertyConfiguration, distinctFilteredFileNameFirstSegments, directory, directoryName);
        }
    }

}