using RobotNet.MapShares.Enums;
using System.ComponentModel.DataAnnotations;

namespace RobotNet.MapShares.Dtos;

#nullable disable

public class MapInfoDto
{
    public Guid Id { get; set; }
    public Guid VersionId { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public double OriginX { get; set; }
    public double OriginY { get; set; }
    public double Resolution { get; set; }
    public double ViewX { get; set; }
    public double ViewY { get; set; }
    public double ViewWidth { get; set; }
    public double ViewHeight { get; set; }
    public double Width { get; set; }
    public double Height { get; set; }
    public bool Active { get; set; }
    public string VDA5050 { get; set; }
}

public class MapCreateModel
{
    public string Name { get; set; }

    [Required]
    public double OriginX { get; set; }

    [Required]
    public double OriginY { get; set; }

    [Required]
    public double Resolution { get; set; }
}

public class MapUpdateModel
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public double OriginX { get; set; }
    public double OriginY { get; set; }
    public double Resolution { get; set; }
}

public class MapActiveModel
{
    public Guid Id { get; set; }
    public bool Active { get; set; }
}
public class MapDataDto
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public double OriginX { get; set; }
    public double OriginY { get; set; }
    public double Resolution { get; set; }
    public double ImageWidth { get; set; }
    public double ImageHeight { get; set; }
    public bool Active { get; set; }

    public NodeDto[] Nodes { get; set; } = [];
    public EdgeDto[] Edges { get; set; } = [];
    public ZoneDto[] Zones { get; set; } = [];
    public ActionDto[] Actions { get; set; } = [];
    public ElementDto[] Elements { get; set; } = [];
}

public class MapSettingDefaultDto
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; } = "";
    public bool Active { get; set; }

    public bool NodeNameAutoGenerate { get; set; }
    public string NodeNameTemplate { get; set; }
    public double NodeAllowedDeviationXy { get; set; }
    public double NodeAllowedDeviationTheta { get; set; }

    public double EdgeMinLength { get; set; }
    public double EdgeStraightMaxSpeed { get; set; }
    public double EdgeCurveMaxSpeed { get; set; }
    public double EdgeMaxHeight { get; set; }
    public double EdgeMinHeight { get; set; }
    public double EdgeMaxRotationSpeed { get; set; }
    public DirectionAllowed EdgeDirectionAllowed { get; set; }
    public bool EdgeRotationAllowed { get; set; }
    public double EdgeAllowedDeviationXy { get; set; }
    public double EdgeAllowedDeviationTheta { get; set; }

    public double ZoneMinSquare { get; set; }
}