namespace Radzen.Blazor.TrimTest.Models;

public enum OrderStatus { New, Processing, Shipped, Closed }

public class Customer
{
    public string Name { get; set; } = "";
    // Nested path Customer.City (audit H14). DAM does NOT flow transitively into nested types, so this
    // getter is a consumer-rooting responsibility - the runtime gate does NOT assert it survives.
    public string City { get; set; } = "";
}

public class Order
{
    public string CustomerName { get; set; } = "";
    public double Total { get; set; }
    public OrderStatus Status { get; set; }
    public OrderStatus? Priority { get; set; }   // nullable enum filter column (audit L5)
    public Customer Customer { get; set; } = new();
    public DateTime Created { get; set; }
}

public class Person
{
    public int Id { get; set; }
    public string FullName { get; set; } = "";
}

public class Appt
{
    public DateTime Start { get; set; }
    public DateTime End { get; set; }
    public string Text { get; set; } = "";
}

public class Sale
{
    public string Region { get; set; } = "";
    public double Revenue { get; set; }
}

// Dedicated types for the chart-series / Gantt / Sankey runtime gate. Each is used ONLY by the one
// component below, so its survival under trimming is attributable to THAT component's DAM (not another
// component's) - removing the chart/Gantt/Sankey DAM would fail the gate, not just the contract test.
public class ChartPoint
{
    public string Category { get; set; } = "";
    public double Value { get; set; }
}

public class GanttRow
{
    public DateTime Start { get; set; }
    public DateTime End { get; set; }
    public string Text { get; set; } = "";
}

public class Flow
{
    public string Source { get; set; } = "";
    public string Target { get; set; } = "";
    public double Amount { get; set; }
}
