using System.Text.Json.Serialization;

namespace View_by_Distance.PhotoPrism.Models;

public record DatabaseFile(
    [property: JsonPropertyName("id")] string Id,
    [property: JsonPropertyName("photo_id")] string PhotoId,
    [property: JsonPropertyName("photo_uid")] string PhotoUid,
    [property: JsonPropertyName("photo_taken_at")] string PhotoTakenAt,
    [property: JsonPropertyName("time_index")] string TimeIndex,
    [property: JsonPropertyName("media_id")] string MediaId,
    [property: JsonPropertyName("media_utc")] string MediaUtc,
    [property: JsonPropertyName("instance_id")] string InstanceId,
    [property: JsonPropertyName("file_uid")] string FileUid,
    [property: JsonPropertyName("file_name")] string FileName,
    [property: JsonPropertyName("file_root")] string FileRoot,
    [property: JsonPropertyName("original_name")] string OriginalName,
    [property: JsonPropertyName("file_hash")] string FileHash,
    [property: JsonPropertyName("file_size")] string FileSize,
    [property: JsonPropertyName("file_codec")] string FileCodec,
    [property: JsonPropertyName("file_type")] string FileType,
    [property: JsonPropertyName("media_type")] string MediaType,
    [property: JsonPropertyName("file_mime")] string FileMime,
    [property: JsonPropertyName("file_primary")] string FilePrimary,
    [property: JsonPropertyName("file_sidecar")] string FileSidecar,
    [property: JsonPropertyName("file_missing")] string FileMissing,
    [property: JsonPropertyName("file_portrait")] string FilePortrait,
    [property: JsonPropertyName("file_video")] string FileVideo,
    [property: JsonPropertyName("file_duration")] string FileDuration,
    [property: JsonPropertyName("file_fps")] string FileFps,
    [property: JsonPropertyName("file_frames")] string FileFrames,
    [property: JsonPropertyName("file_width")] string FileWidth,
    [property: JsonPropertyName("file_height")] string FileHeight,
    [property: JsonPropertyName("file_orientation")] string FileOrientation,
    [property: JsonPropertyName("file_orientation_src")] string FileOrientationSrc,
    [property: JsonPropertyName("file_projection")] string FileProjection,
    [property: JsonPropertyName("file_aspect_ratio")] string FileAspectRatio,
    [property: JsonPropertyName("file_hdr")] string FileHdr,
    [property: JsonPropertyName("file_watermark")] string FileWatermark,
    [property: JsonPropertyName("file_color_profile")] string FileColorProfile,
    [property: JsonPropertyName("file_main_color")] string FileMainColor,
    [property: JsonPropertyName("file_colors")] string FileColors,
    [property: JsonPropertyName("File_luminance")] string FileLuminance,
    [property: JsonPropertyName("file_diff")] string FileDiff,
    [property: JsonPropertyName("file_chroma")] string FileChroma,
    [property: JsonPropertyName("file_software")] string FileSoftware,
    [property: JsonPropertyName("file_error")] string FileError,
    [property: JsonPropertyName("mod_time")] string ModTime,
    [property: JsonPropertyName("created_at")] string CreatedAt,
    [property: JsonPropertyName("created_in")] string CreatedIn,
    [property: JsonPropertyName("updated_at")] string UpdatedAt,
    [property: JsonPropertyName("updated_in")] string UpdatedIn,
    [property: JsonPropertyName("published_at")] object PublishedAt,
    [property: JsonPropertyName("deleted_at")] object DeletedAt)
{

    internal static Shared.Models.DatabaseFile Map(DatabaseFile databaseFile)
    {
        Shared.Models.DatabaseFile result;
        (int id, int photoId) = (int.Parse(databaseFile.Id), int.Parse(databaseFile.PhotoId));
        (int fileWidth, int fileHeight) = (int.Parse(databaseFile.FileWidth), int.Parse(databaseFile.FileHeight));
        result = new(id,
                     photoId,
                     F_PhotoPrism.HexStringToString(databaseFile.PhotoUid),
                     F_PhotoPrism.HexStringToString(databaseFile.PhotoTakenAt),
                     F_PhotoPrism.HexStringToString(databaseFile.TimeIndex),
                     F_PhotoPrism.HexStringToString(databaseFile.MediaId),
                     F_PhotoPrism.HexStringToString(databaseFile.MediaUtc),
                     F_PhotoPrism.HexStringToString(databaseFile.InstanceId),
                     F_PhotoPrism.HexStringToString(databaseFile.FileUid),
                     F_PhotoPrism.HexStringToString(databaseFile.FileName),
                     F_PhotoPrism.HexStringToString(databaseFile.FileRoot),
                     F_PhotoPrism.HexStringToString(databaseFile.OriginalName),
                     F_PhotoPrism.HexStringToString(databaseFile.FileHash),
                     F_PhotoPrism.HexStringToString(databaseFile.FileSize),
                     F_PhotoPrism.HexStringToString(databaseFile.FileCodec),
                     F_PhotoPrism.HexStringToString(databaseFile.FileType),
                     F_PhotoPrism.HexStringToString(databaseFile.MediaType),
                     F_PhotoPrism.HexStringToString(databaseFile.FileMime),
                     F_PhotoPrism.HexStringToString(databaseFile.FilePrimary),
                     F_PhotoPrism.HexStringToString(databaseFile.FileSidecar),
                     F_PhotoPrism.HexStringToString(databaseFile.FileMissing),
                     F_PhotoPrism.HexStringToString(databaseFile.FilePortrait),
                     F_PhotoPrism.HexStringToString(databaseFile.FileVideo),
                     F_PhotoPrism.HexStringToString(databaseFile.FileDuration),
                     F_PhotoPrism.HexStringToString(databaseFile.FileFps),
                     F_PhotoPrism.HexStringToString(databaseFile.FileFrames),
                     fileWidth,
                     fileHeight,
                     F_PhotoPrism.HexStringToString(databaseFile.FileOrientation),
                     F_PhotoPrism.HexStringToString(databaseFile.FileOrientationSrc),
                     F_PhotoPrism.HexStringToString(databaseFile.FileProjection),
                     F_PhotoPrism.HexStringToString(databaseFile.FileAspectRatio),
                     F_PhotoPrism.HexStringToString(databaseFile.FileHdr),
                     F_PhotoPrism.HexStringToString(databaseFile.FileWatermark),
                     F_PhotoPrism.HexStringToString(databaseFile.FileColorProfile),
                     F_PhotoPrism.HexStringToString(databaseFile.FileMainColor),
                     F_PhotoPrism.HexStringToString(databaseFile.FileColors),
                     F_PhotoPrism.HexStringToString(databaseFile.FileLuminance),
                     F_PhotoPrism.HexStringToString(databaseFile.FileDiff),
                     F_PhotoPrism.HexStringToString(databaseFile.FileChroma),
                     F_PhotoPrism.HexStringToString(databaseFile.FileSoftware),
                     F_PhotoPrism.HexStringToString(databaseFile.FileError),
                     F_PhotoPrism.HexStringToString(databaseFile.ModTime),
                     F_PhotoPrism.HexStringToString(databaseFile.CreatedAt),
                     F_PhotoPrism.HexStringToString(databaseFile.CreatedIn),
                     F_PhotoPrism.HexStringToString(databaseFile.UpdatedAt),
                     F_PhotoPrism.HexStringToString(databaseFile.UpdatedIn),
                     databaseFile.PublishedAt,
                     databaseFile.DeletedAt);
        return result;
    }

}