using System.Text.Json;
using System.Text.Json.Serialization;
using View_by_Distance.Shared.Models.Methods;

namespace View_by_Distance.Shared.Models;

public class Face : Properties.IFace, IFace
{

    protected double? _Α;
    protected DateTime _DateTime;
    protected FaceEncoding _FaceEncoding;
    protected Dictionary<string, FacePoint[]> _FaceLandmarks;
    protected OutputResolution _OutputResolution;
    protected Location _Location;
    protected int? _LocationIndex;
    protected bool _Populated;
    protected string _RelativePath;
    public double? α => _Α;
    public DateTime DateTime => _DateTime;
    public FaceEncoding FaceEncoding => _FaceEncoding;
    public Dictionary<string, FacePoint[]> FaceLandmarks => _FaceLandmarks;
    public OutputResolution OutputResolution => _OutputResolution;
    public Location Location => _Location;
    public int? LocationIndex => _LocationIndex;
    public bool Populated => _Populated;
    public string RelativePath => _RelativePath;

    [JsonConstructor]
    public Face(double? α, DateTime dateTime, FaceEncoding faceEncoding, Dictionary<string, FacePoint[]> faceLandmarks, OutputResolution outputResolution, Location location, int? locationIndex, bool populated, string relativePath)
    {
        _Α = α;
        _DateTime = dateTime;
        _FaceEncoding = faceEncoding;
        _FaceLandmarks = faceLandmarks;
        _Location = location;
        _LocationIndex = locationIndex;
        _OutputResolution = outputResolution;
        _Populated = populated;
        _RelativePath = relativePath;
    }

    double Stateless.Methods.IFace.TestStatic_Getα(int x1, int x2, int y1, int y2) => throw new NotImplementedException();

    string Stateless.Methods.IFace.TestStatic_GetJson(string jsonFileFullName) => throw new NotImplementedException();

    Face Stateless.Methods.IFace.TestStatic_GetFace(string jsonFileFullName) => throw new NotImplementedException();

    Face[] Stateless.Methods.IFace.TestStatic_GetFaces(string jsonFileFullName) => throw new NotImplementedException();

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

}