using System.Collections.ObjectModel;
using View_by_Distance.Shared.Models;

namespace View_by_Distance.Metadata.Models.Stateless.Methods;

internal static class Base
{

    internal static string? GetMaker(ExifDirectoryBase[]? exifBaseDirectories)
    {
        string? result = null;
        if (exifBaseDirectories is not null)
        {
            string value;
            foreach (ExifDirectoryBase exifDirectoryBase in exifBaseDirectories)
            {
                value = exifDirectoryBase?.Make is null ? string.Empty : exifDirectoryBase.Make.ToString().Trim();
                if (string.IsNullOrEmpty(value))
                    result = null;
                else
                {
                    result = $"{value[0].ToString().ToUpper()}{value[1..].ToLower()}";
                    break;
                }
            }
        }
        return result;
    }

    internal static string? GetModel(ExifDirectoryBase[]? exifBaseDirectories)
    {
        string? result = null;
        if (exifBaseDirectories is not null)
        {
            string value;
            foreach (ExifDirectoryBase exifDirectoryBase in exifBaseDirectories)
            {
                value = exifDirectoryBase?.Model is null ? string.Empty : exifDirectoryBase.Model.ToString().Trim();
                if (string.IsNullOrEmpty(value))
                    result = null;
                else
                {
                    result = value;
                    break;
                }
            }
        }
        return result;
    }

    internal static ReadOnlyCollection<string> GetKeywords(ExifDirectoryBase[]? exifBaseDirectories)
    {
        List<string> results = [];
        if (exifBaseDirectories is not null)
        {
            string value;
            foreach (ExifDirectoryBase exifDirectoryBase in exifBaseDirectories)
            {
                value = exifDirectoryBase?.WinKeywords is null ? string.Empty : exifDirectoryBase.WinKeywords.ToString().Trim();
                if (string.IsNullOrEmpty(value))
                    continue;
                results.Add(value);
            }
        }
        return new(results);
    }

}