using System.Text.Json;
using System.Text.Json.Serialization;

namespace View_by_Distance.Shared.Models;

public class Property : Properties.IProperty
{

    protected bool? _WrongYear;
    protected DateTime _CreationTime;
    protected DateTime _LastWriteTime;
    protected DateTime? _DateTime;
    protected DateTime? _DateTimeDigitized;
    protected DateTime? _DateTimeOriginal;
    protected long _FileSize;
    protected DateTime? _GPSDateStamp;
    protected int? _Id;
    protected int[] _Indices;
    protected int? _Height;
    protected int? _Width;
    protected string _Make;
    protected int? _MetadataGroups;
    protected string _Model;
    protected string _Orientation;
    protected string _UniqueImageId;
    public bool? WrongYear => _WrongYear;
    public DateTime CreationTime => _CreationTime;
    public DateTime LastWriteTime => _LastWriteTime;
    public DateTime? DateTime => _DateTime;
    public DateTime? DateTimeDigitized => _DateTimeDigitized;
    public DateTime? DateTimeOriginal => _DateTimeOriginal;
    public long FileSize => _FileSize;
    public DateTime? GPSDateStamp => _GPSDateStamp;
    public int? Id => _Id;
    public int[] Indices => _Indices;
    public int? Height => _Height;
    public int? Width => _Width;
    public string Make => _Make;
    public int? MetadataGroups => _MetadataGroups;
    public string Model => _Model;
    public string Orientation => _Orientation;
    public string UniqueImageId => _UniqueImageId;

    [JsonConstructor]
    public Property(bool? wrongYear, DateTime creationTime, DateTime lastWriteTime, DateTime? dateTime, DateTime? dateTimeDigitized, DateTime? dateTimeOriginal, DateTime? gpsDateStamp, long fileSize, int? id, int[] indices, int? height, int? width, string make, int? metadataGroups, string model, string orientation, string uniqueImageId)
    {
        _CreationTime = creationTime;
        _DateTime = dateTime;
        _DateTimeDigitized = dateTimeDigitized;
        _DateTimeOriginal = dateTimeOriginal;
        _GPSDateStamp = gpsDateStamp;
        _FileSize = fileSize;
        _Height = height;
        _Id = id;
        _Indices = indices;
        _LastWriteTime = lastWriteTime;
        _Make = make;
        _MetadataGroups = metadataGroups;
        _Model = model;
        _Orientation = orientation;
        _Width = width;
        _WrongYear = wrongYear;
        _UniqueImageId = uniqueImageId;
    }

    public override string ToString()
    {
        string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true });
        return result;
    } // ...

}