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

namespace View_by_Distance.Shared.Models;

public class PersonAddress : Properties.IPersonAddress
{

    protected readonly PersonAddressStreet _Street; // {-_-}SingletonClass
    protected readonly PersonAddressCity _City; // {-_-}SingletonClass
    protected readonly PersonAddressState _State; // {-_-}SingletonClass
    protected readonly PersonAddressZipCode _ZipCode; // {-_-}SingletonClass

    public PersonAddressStreet Street => _Street; // {-_-}SingletonClass
    public PersonAddressCity City => _City; // {-_-}SingletonClass
    public PersonAddressState State => _State; // {-_-}SingletonClass
    public PersonAddressZipCode ZipCode => _ZipCode; // {-_-}SingletonClass

    [JsonConstructor]
    public PersonAddress
    (
        PersonAddressStreet street,
        PersonAddressCity city,
        PersonAddressState state,
        PersonAddressZipCode zipCode
    )
    {
        _Street = street; // {-_-}SingletonClass
        _City = city; // {-_-}SingletonClass
        _State = state; // {-_-}SingletonClass
        _ZipCode = zipCode; // {-_-}SingletonClass
    }

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

}