using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace StandardScene.Model
{

    public class MapStructure
    {
        public FassMap Map { get; set; }
        public List<FassNode> Nodes { get; set; }
        public List<Edge> Edges { get; set; }
        public List<object> Zones { get; set; }
        public List<object> Tags { get; set; }
    }

    public class FassMap
    {
        public int Index { get; set; }
        public string Id { get; set; }
        public string Kind { get; set; }
        public string Type { get; set; }
        public Base Base { get; set; }
        public Image Image { get; set; }
        public List<object> Extends { get; set; }
    }

    public class Base
    {
        public bool Visible { get; set; }
        public Size Size { get; set; }
        public double GlobalAlpha { get; set; }
        public int LineWidth { get; set; }
        public List<int> LineDash { get; set; }
        public string StrokeStyle { get; set; }
        public string FillStyle { get; set; }
        public Center Center { get; set; }
    }

    public class Size
    {
        public double W { get; set; }
        public double H { get; set; }
    }

    public class Center
    {
        public double X { get; set; }
        public double Y { get; set; }
    }

    public class Image
    {
        public bool Visible { get; set; }
        public double GlobalAlpha { get; set; }
        public string Src { get; set; }
        public bool Origin { get; set; }
        public bool Manual { get; set; }
        public ManualPoint ManualPoint { get; set; }
        public ManualSize ManualSize { get; set; }
    }

    public class ManualPoint
    {
        public double X { get; set; }
        public double Y { get; set; }
    }

    public class ManualSize
    {
        public double W { get; set; }
        public double H { get; set; }
    }

    public class FassNode
    {
        public int Index { get; set; }
        public string Id { get; set; }
        public string Kind { get; set; }
        public string Type { get; set; }
        public NodeBase Base { get; set; }
        public Code Code { get; set; }
        public Name Name { get; set; }
        public Image Image { get; set; }
        public Lock Lock { get; set; }
        public Data Data { get; set; }
        public List<object> Extends { get; set; }
    }

    public class NodeBase
    {
        public bool Visible { get; set; }
        public Point Point { get; set; }
        public Size Size { get; set; }
        public double GlobalAlpha { get; set; }
        public int LineWidth { get; set; }
        public List<int> LineDash { get; set; }
        public string StrokeStyle { get; set; }
        public string FillStyle { get; set; }
        public Center Center { get; set; }
    }

    public class Point
    {
        public double X { get; set; }
        public double Y { get; set; }
    }

    public class Code
    {
        public bool Visible { get; set; }
        public double GlobalAlpha { get; set; }
        public string Font { get; set; }
        public string FillStyle { get; set; }
        public string Text { get; set; }
    }

    public class Name
    {
        public bool Visible { get; set; }
        public double GlobalAlpha { get; set; }
        public string Font { get; set; }
        public string FillStyle { get; set; }
        public string Text { get; set; }
    }

    public class Lock
    {
        public bool Enable { get; set; }
    }

    public class Data
    {
        public string NodeId { get; set; }
        public int SequenceId { get; set; }
        public string NodeDescription { get; set; }
        public bool Released { get; set; }
        public NodePosition NodePosition { get; set; }
        public List<FassAction> Actions { get; set; }
    }

    public class NodePosition
    {
        public double X { get; set; }
        public double Y { get; set; }
        public string MapId { get; set; }
    }

    public class FassAction
    {
        public bool Action0 { get; set; }
        public string ActionId { get; set; }
        public List<FassActionParameter> ActionParameters { get; set; }
        public string ActionType { get; set; }
        public string BlockingType { get; set; }
        public int SortNumber { get; set; }
    }

    public class FassActionParameter
    {
        public bool Parameter0 { get; set; }
        public string Key { get; set; }
        public string Value { get; set; }
    }

    public class Edge
    {
        public int Index { get; set; }
        public string Id { get; set; }
        public string Kind { get; set; }
        public string Type { get; set; }
        public EdgeBase Base { get; set; }
        public Code Code { get; set; }
        public Name Name { get; set; }
        public Lock Lock { get; set; }
        public EdgeData Data { get; set; }
        public List<object> Extends { get; set; }
    }

    public class EdgeBase
    {
        public bool Visible { get; set; }
        public Point Point { get; set; }
        public Size Size { get; set; }
        public double GlobalAlpha { get; set; }
        public int LineWidth { get; set; }
        public List<int> LineDash { get; set; }
        public string StrokeStyle { get; set; }
        public string FillStyle { get; set; }
        public Center Center { get; set; }
        public bool IsOneway { get; set; }
        public double Width { get; set; }
        public Node StartNode { get; set; }
        public Node EndNode { get; set; }
    }

    public class EdgeData
    {
        public string EdgeId { get; set; }
        public int SequenceId { get; set; }
        public string EdgeDescription { get; set; }
        public bool Released { get; set; }
        public string StartNodeId { get; set; }
        public string EndNodeId { get; set; }
        public double MaxSpeed { get; set; }
        public double MaxHeight { get; set; }
        public double MinHeight { get; set; }
        public double Orientation { get; set; }
        public string OrientationType { get; set; }
        public string Direction { get; set; }
        public bool RotationAllowed { get; set; }
        public double MaxRotationSpeed { get; set; }
        public double Length { get; set; }
        public Trajectory Trajectory { get; set; }
        public List<object> Actions { get; set; }
    }

    public class Trajectory
    {
        public double Degree { get; set; }
        public List<int> KnotVector { get; set; }
        public List<object> ControlPoints { get; set; }
    }
}
