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

namespace View_by_Distance.Map.Models;

public class Configuration
{

    public int FaceConfidencePercent { init; get; }
    public int FaceDistancePermyriad { init; get; }
    public string FacePartsFileNameExtension { init; get; }
    public string FacesFileNameExtension { init; get; }
    public string FacesHiddenFileNameExtension { init; get; }
    public string MappingDefaultName { init; get; }
    public int PersonBirthdayFirstYear { init; get; }
    public string PersonBirthdayFormat { init; get; }
    public char[] PersonCharacters { init; get; }
    public int PersonCharactersCopyCount { init; get; }
    public int RangeDaysDeltaTolerance { init; get; }
    public double RangeDistanceTolerance { init; get; }
    public bool SaveSortingWithoutPerson { init; get; }
    public int SortingMaximumPerKey { init; get; }
    public int SortingMinimumToUseSigma { init; get; }

    [JsonConstructor]
    public Configuration(int faceConfidencePercent,
                         int faceDistancePermyriad,
                         string mappingDefaultName,
                         int personBirthdayFirstYear,
                         string personBirthdayFormat,
                         char[] personCharacters,
                         int personCharactersCopyCount,
                         int[] rangeDaysDeltaTolerance,
                         double[] rangeDistanceTolerance,
                         bool saveSortingWithoutPerson,
                         int sortingMaximumPerKey,
                         int sortingMinimumToUseSigma,
                         string facesFileNameExtension,
                         string facesHiddenFileNameExtension,
                         string facePartsFileNameExtension)
    {
        PersonCharacters = personCharacters;
        MappingDefaultName = mappingDefaultName;
        PersonBirthdayFormat = personBirthdayFormat;
        SortingMaximumPerKey = sortingMaximumPerKey;
        FaceConfidencePercent = faceConfidencePercent;
        FaceDistancePermyriad = faceDistancePermyriad;
        FacesFileNameExtension = facesFileNameExtension;
        PersonBirthdayFirstYear = personBirthdayFirstYear;
        RangeDistanceTolerance = rangeDistanceTolerance[1];
        SaveSortingWithoutPerson = saveSortingWithoutPerson;
        SortingMinimumToUseSigma = sortingMinimumToUseSigma;
        RangeDaysDeltaTolerance = rangeDaysDeltaTolerance[1];
        PersonCharactersCopyCount = personCharactersCopyCount;
        FacePartsFileNameExtension = facePartsFileNameExtension;
        FacesHiddenFileNameExtension = facesHiddenFileNameExtension;
    }

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

}