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 DateTime DateTimeOriginalThenMinimumDateTime { init; get; }
    public object? Encoding { init; get; }
    public int Id { init; get; }
    public bool? IsWrongYear { init; get; }
    public double? Length { init; get; }
    public int? WholePercentages { init; get; }

    [JsonConstructor]
    public FaceDistance(int? confidencePercent, DateTime dateTimeOriginalThenMinimumDateTime, object? encoding, int id, bool? isWrongYear, double? length, int? wholePercentages)
    {
        ConfidencePercent = confidencePercent;
        DateTimeOriginalThenMinimumDateTime = dateTimeOriginalThenMinimumDateTime;
        Encoding = encoding;
        Id = id;
        IsWrongYear = isWrongYear;
        Length = length;
        WholePercentages = wholePercentages;
    }

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

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

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

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

}