using System.Drawing;

namespace View_by_Distance.Shared.Models;

public record LocationContainer(DateOnly CreationDateOnly,
                                ExifDirectory? ExifDirectory,
                                int? DirectoryNumber,
                                string? DisplayDirectoryName,
                                object? Encoding,
                                FaceFile? FaceFile,
                                FilePath FilePath,
                                bool FromDistanceContent,
                                int Id,
                                int? LengthPermyriad,
                                FilePath? LengthSource,
                                long? PersonKey,
                                RectangleF? Rectangle,
                                int WholePercentages)
{

    public static LocationContainer Get(LocationContainer locationContainer, object? encoding, bool keepExifDirectory)
    {
        LocationContainer result;
        result = new(locationContainer.CreationDateOnly,
                     keepExifDirectory ? locationContainer.ExifDirectory : null,
                     locationContainer.DirectoryNumber,
                     locationContainer.DisplayDirectoryName,
                     encoding,
                     locationContainer.FaceFile,
                     locationContainer.FilePath,
                     locationContainer.FromDistanceContent,
                     locationContainer.Id,
                     locationContainer.LengthPermyriad,
                     locationContainer.LengthSource,
                     locationContainer.PersonKey,
                     locationContainer.Rectangle,
                     locationContainer.WholePercentages);
        return result;
    }

    public static LocationContainer Get(LocationContainer source, LocationContainer locationContainer, int lengthPermyriad, bool keepExifDirectory, bool keepEncoding)
    {
        LocationContainer result;
        result = new(locationContainer.CreationDateOnly,
                     keepExifDirectory ? locationContainer.ExifDirectory : null,
                     locationContainer.DirectoryNumber,
                     locationContainer.DisplayDirectoryName,
                     keepEncoding ? locationContainer.Encoding : null,
                     locationContainer.FaceFile,
                     locationContainer.FilePath,
                     locationContainer.FromDistanceContent,
                     locationContainer.Id,
                     lengthPermyriad,
                     source.FilePath,
                     locationContainer.PersonKey,
                     locationContainer.Rectangle,
                     locationContainer.WholePercentages);
        return result;
    }

}