using System.Text.Json.Serialization;

namespace RobotNet.WebApp.Charts.Models.BarChart.Axes;

public class ChartAxesGrid
{
    /// <summary>
    /// If <see langword="true" />, gridlines are circular (on radar and polar area charts only).
    /// </summary>
    [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
    public bool? Circular { get; set; }

    /// <summary>
    /// Color of the grid axis lines. Here one can write a CSS method or even a JavaScript method for a dynamic color.
    /// </summary>
    [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
    public string? Color { get; set; }

    /// <summary>
    /// If false, do not display grid lines for this axis.
    /// </summary>
    public bool Display { get; set; } = true;

    /// <summary>
    /// If <see langword="true" />, draw lines on the chart area inside the axis lines. This is useful when there are multiple
    /// axes and you need to control which grid lines are drawn.
    /// </summary>
    public bool DrawOnChartArea { get; set; } = true;

    /// <summary>
    /// If <see langword="true" />, draw lines beside the ticks in the axis area beside the chart.
    /// </summary>
    public bool DrawTicks { get; set; } = true;

    /// <summary>
    /// Stroke width of grid lines.
    /// </summary>
    public int LineWidth { get; set; } = 1;

    /// <summary>
    /// If <see langword="true" />, grid lines will be shifted to be between labels. This is set to true for a bar chart by
    /// default.
    /// </summary>
    [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
    public bool? Offset { get; set; } = false;

    /// <summary>
    /// Length and spacing of the tick mark line.
    /// </summary>
    [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
    public List<int>? TickBorderDash { get; set; }

    /// <summary>
    /// Offset for the line dash of the tick mark.
    /// </summary>
    [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
    public int? TickBorderDashOffset { get; set; }

    /// <summary>
    /// Color of the tick line. If unset, defaults to the grid line color.
    /// </summary>
    [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
    public string? TickColor { get; set; }

    /// <summary>
    /// Length in pixels that the grid lines will draw into the axis area.
    /// </summary>
    [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
    public int? TickLength { get; set; }

    /// <summary>
    /// Width of the tick mark in pixels.
    /// </summary>
    [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
    public int? TickWidth { get; set; }

    /// <summary>
    /// z-index of the gridline layer. Values <= 0 are drawn under datasets, > 0 on top.
    /// </summary>
    [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
    public int? Z { get; set; }
}
