namespace OpenNest.Posts.Cincinnati
{
    public sealed class SpeedClassifier
    {
        public double FastThreshold { get; set; } = 0.5;
        public double SlowThreshold { get; set; } = 0.1;

        public string Classify(double contourLength, double sheetDiagonal)
        {
            var ratio = contourLength / sheetDiagonal;
            if (ratio >= FastThreshold) return "FAST";
            if (ratio <= SlowThreshold) return "SLOW";
            return "MEDIUM";
        }

        public string FormatCutDist(double contourLength, double sheetDiagonal)
        {
            return $"CutDist={FormatValue(contourLength)}/{FormatValue(sheetDiagonal)}";
        }

        private static string FormatValue(double value)
        {
            // Cincinnati convention: no leading zero for values < 1 (e.g., ".8702" not "0.8702")
            var rounded = System.Math.Round(value, 4);
            var str = rounded.ToString("0.####", System.Globalization.CultureInfo.InvariantCulture);
            if (rounded > 0 && rounded < 1 && str.StartsWith("0."))
                return str.Substring(1);
            return str;
        }
    }
}
