using System.Text.Json.Serialization;

namespace View_by_Distance.Shared.Models;

public record Datum(
    [property: JsonPropertyName("accessRuleIds")] IReadOnlyList<object> AccessRuleIds,
    [property: JsonPropertyName("childAssetTypeInfo")] IReadOnlyList<object> ChildAssetTypeInfo,
    [property: JsonPropertyName("contentProperties")] ContentProperties ContentProperties,
    [property: JsonPropertyName("createdBy")] string CreatedBy,
    [property: JsonPropertyName("createdDate")] DateTime CreatedDate,
    [property: JsonPropertyName("eTagResponse")] string ETagResponse,
    [property: JsonPropertyName("groupPermissions")] IReadOnlyList<object> GroupPermissions,
    [property: JsonPropertyName("id")] string Id,
    [property: JsonPropertyName("isRoot")] bool IsRoot,
    [property: JsonPropertyName("isShared")] bool IsShared,
    [property: JsonPropertyName("keywords")] IReadOnlyList<object> Keywords,
    [property: JsonPropertyName("kind")] string Kind,
    [property: JsonPropertyName("labels")] IReadOnlyList<object> Labels,
    [property: JsonPropertyName("modifiedDate")] DateTime ModifiedDate,
    [property: JsonPropertyName("name")] string Name,
    [property: JsonPropertyName("ownerId")] string OwnerId,
    [property: JsonPropertyName("parentMap")] ParentMap ParentMap,
    [property: JsonPropertyName("parents")] IReadOnlyList<string> Parents,
    [property: JsonPropertyName("protectedFolder")] bool ProtectedFolder,
    [property: JsonPropertyName("restricted")] bool Restricted,
    [property: JsonPropertyName("status")] string Status,
    [property: JsonPropertyName("subKinds")] IReadOnlyList<object> SubKinds,
    [property: JsonPropertyName("transforms")] IReadOnlyList<string> Transforms,
    [property: JsonPropertyName("version")] int Version,
    [property: JsonPropertyName("xAccntParentMap")] XAccntParentMap XAccntParentMap,
    [property: JsonPropertyName("xAccntParents")] IReadOnlyList<object> XAccntParents,
    [property: JsonPropertyName("match")] bool? Match
);

[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(Datum))]
public partial class DatumGenerationContext : JsonSerializerContext
{
}

[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(Dictionary<string, Datum>))]
public partial class DictionaryDatumGenerationContext : JsonSerializerContext
{
}