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

namespace View_by_Distance.Shared.Models;

public record class FaceDistance : Properties.IFaceDistance
{

    public int? ConfidencePercent { init; get; }
    public object? Encoding { init; get; }
    public int Id { init; get; }
    public bool? IsWrongYear { init; get; }
    public double? Length { init; get; }
    public DateTime? MinimumDateTime { init; get; }
    public int? NormalizedRectangle { init; get; }

    [JsonConstructor]
    public FaceDistance(int? confidencePercent, object? encoding, int id, bool? isWrongYear, double? length, DateTime? minimumDateTime, int? normalizedRectangle)
    {
        ConfidencePercent = confidencePercent;
        Encoding = encoding;
        Id = id;
        IsWrongYear = isWrongYear;
        Length = length;
        MinimumDateTime = minimumDateTime;
        NormalizedRectangle = normalizedRectangle;
    }

    public FaceDistance(int? confidencePercent, object? encoding, int id, bool? isWrongYear, DateTime? minimumDateTime, int? normalizedRectangle) :
        this(confidencePercent, encoding, id, isWrongYear, null, minimumDateTime, normalizedRectangle)
    { }

    public FaceDistance(FaceDistance faceDistance, double length) :
        this(faceDistance.ConfidencePercent, null, faceDistance.Id, faceDistance.IsWrongYear, length, faceDistance.MinimumDateTime, faceDistance.NormalizedRectangle)
    { }

    public FaceDistance(object encoding) => Encoding = encoding;

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

}