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

namespace View_by_Distance.Shared.Models;

public class Storage : Properties.IStorage
{

    protected string _DistanceResultRootDirectory;
    protected string _FaceRootDirectory;
    protected string _IndexInfoRootDirectory;
    protected string _MetadataRootDirectory;
    protected string _PeopleRootDirectory;
    protected string _ResizeRootDirectory;
    protected string _RootDirectory;
    protected string _RootResultsDirectory;
    protected string _UrlRoot;
    public string DistanceResultRootDirectory => _DistanceResultRootDirectory;
    public string FaceRootDirectory => _FaceRootDirectory;
    public string IndexInfoRootDirectory => _IndexInfoRootDirectory;
    public string MetadataRootDirectory => _MetadataRootDirectory;
    public string PeopleRootDirectory => _PeopleRootDirectory;
    public string ResizeRootDirectory => _ResizeRootDirectory;
    public string RootDirectory => _RootDirectory;
    public string RootResultsDirectory => _RootResultsDirectory;
    public string UrlRoot => _UrlRoot;

    [JsonConstructor]
    public Storage(string distanceResultRootDirectory, string faceRootDirectory, string indexInfoRootDirectory, string metadataRootDirectory, string peopleRootDirectory, string resizeRootDirectory, string rootDirectory, string rootResultsDirectory, string urlRoot)
    {
        _DistanceResultRootDirectory = distanceResultRootDirectory;
        _FaceRootDirectory = faceRootDirectory;
        _IndexInfoRootDirectory = indexInfoRootDirectory;
        _MetadataRootDirectory = metadataRootDirectory;
        _PeopleRootDirectory = peopleRootDirectory;
        _ResizeRootDirectory = resizeRootDirectory;
        _RootDirectory = rootDirectory;
        _RootResultsDirectory = rootResultsDirectory;
        _UrlRoot = urlRoot;
        string fullRootResultsDirectory;
        if (rootResultsDirectory.StartsWith(rootDirectory))
            fullRootResultsDirectory = rootResultsDirectory;
        else
            fullRootResultsDirectory = string.Concat(rootDirectory, rootResultsDirectory);
        _RootResultsDirectory = fullRootResultsDirectory;
        if (!distanceResultRootDirectory.StartsWith(rootDirectory))
            _DistanceResultRootDirectory = string.Concat(fullRootResultsDirectory, distanceResultRootDirectory);
        if (!faceRootDirectory.StartsWith(rootDirectory))
            _FaceRootDirectory = string.Concat(fullRootResultsDirectory, faceRootDirectory);
        if (!indexInfoRootDirectory.StartsWith(rootDirectory))
            _IndexInfoRootDirectory = string.Concat(fullRootResultsDirectory, indexInfoRootDirectory);
        if (!metadataRootDirectory.StartsWith(rootDirectory))
            _MetadataRootDirectory = string.Concat(fullRootResultsDirectory, metadataRootDirectory);
        if (!peopleRootDirectory.StartsWith(rootDirectory))
            _PeopleRootDirectory = string.Concat(fullRootResultsDirectory, peopleRootDirectory);
        if (!resizeRootDirectory.StartsWith(rootDirectory))
            _ResizeRootDirectory = string.Concat(fullRootResultsDirectory, resizeRootDirectory);
    }

    public Storage(string rootDirectory, string rootResultsDirectory, string peopleRootDirectory)
    {
        _DistanceResultRootDirectory = "distanceResultRootDirectory";
        _FaceRootDirectory = "faceRootDirectory";
        _IndexInfoRootDirectory = "indexInfoRootDirectory";
        _MetadataRootDirectory = "metadataRootDirectory";
        _PeopleRootDirectory = peopleRootDirectory;
        _ResizeRootDirectory = "resizeRootDirectory";
        _RootDirectory = rootDirectory;
        _RootResultsDirectory = rootResultsDirectory;
        _UrlRoot = "urlRoot";
    }

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

}