using RobotNet.MapShares.Dtos;
using RobotNet.MapShares.Enums;

namespace RobotNet.MapShares.Models;

public enum MapEditorBackupType
{
    Node,
    ControlPoint1Edge,
    ControlPoint2Edge,
    Zone,
    MoveNode,
    MoveEdge,
    Copy,
    MergeNode,
    SplitNode
}

public class MapEditorBackup
{
    public MapEditorBackupType Type { get; set; }
    public Guid Id { get; set; }
    public object Obj { get; set; } = null!;
}

public class MapEditorBackupModel
{
    public MapEditorBackup[] Steps { get; set; } = [];
}

public class PositionBackup
{
    public Guid Id { get; set; }
    public double X { get; set; }
    public double Y { get; set; }
}

public class EdgeBackup
{
    public Guid Id { get; set; }
    public TrajectoryDegree TrajectoryDegree { get; set; }
    public double StartX { get; set; }
    public double StartY { get; set; }
    public double EndX { get; set; }
    public double EndY { get; set; }
    public double ControlPoint1X { get; set; }
    public double ControlPoint1Y { get; set; }
    public double ControlPoint2X { get; set; }
    public double ControlPoint2Y { get; set; }
}

public class ZoneShapeBackup
{
    public int NodeChange { get; set; }
    public double X1 { get; set; }
    public double Y1 { get; set; }
    public double X2 { get; set; }
    public double Y2 { get; set; }
    public double X3 { get; set; }
    public double Y3 { get; set; }
    public double X4 { get; set; }
    public double Y4 { get; set; }
}

public class SplitNodeBackup
{
    public Guid NodeId { get; set; }
    public Dictionary<Guid, NodeDto> EdgeSplit { get; set; } = [];
}

public class MergeNodeUpdate
{
    public Guid NodeId { get; set; }
    public Dictionary<Guid, Guid> EdgesMerge { get; set; } = [];
}