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

namespace View_by_Distance.Shared.Models;

public class Navigate : Properties.INavigate
{

    protected List<string[]> _Levels;
    protected string _SourceDirectory;
    protected string _DirectoryRelativePath;
    protected string _EncodedSourceDirectory;
    protected FaceFileSystem[] _FaceFileSystemCollection;
    protected DirectoryFileSystem[] _DirectoryFileSystemCollection;
    public List<string[]> Levels => _Levels;
    public string SourceDirectory => _SourceDirectory;
    public string DirectoryRelativePath => _DirectoryRelativePath;
    public string EncodedSourceDirectory => _EncodedSourceDirectory;
    public FaceFileSystem[] FaceFileSystemCollection => _FaceFileSystemCollection;
    public DirectoryFileSystem[] DirectoryFileSystemCollection => _DirectoryFileSystemCollection;

    [JsonConstructor]
    public Navigate(List<string[]> levels, string sourceDirectory, string directoryRelativePath, string encodedSourceDirectory, FaceFileSystem[] faceFileSystemCollection, DirectoryFileSystem[] directoryFileSystemCollection)
    {
        _Levels = levels;
        _SourceDirectory = sourceDirectory;
        _DirectoryRelativePath = directoryRelativePath;
        _EncodedSourceDirectory = encodedSourceDirectory;
        _FaceFileSystemCollection = faceFileSystemCollection;
        _DirectoryFileSystemCollection = directoryFileSystemCollection;
    }

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

}