// Copyright (C) 2026 Jason M. Schwefel. All Rights Reserved.
package com.coldboreballisticsllc.scopedope.label.format

/** Physical size grouping — all format variants for the same label roll share a group. */
enum class LabelSizeGroup(val sizeName: String, val rollWidthMm: Float) {
    CIRCLE_50MM("50 mm Round",    50f),
    RECT_50X30 ("50×30 mm",       50f),
    RECT_50X50 ("50×50 mm Square",50f),
    RECT_40X70 ("40×70 mm",       40f),
    RECT_50X70 ("50×70 mm",       50f),
    RECT_50X80 ("50×80 mm",       50f),
}

/** Physical shape of a label. */
sealed class LabelShape {
    data class Circle(val diameterMm: Float)                        : LabelShape()
    data class Rectangle(val widthMm: Float, val heightMm: Float)  : LabelShape()
}

/**
 * Describes a supported label format.
 *
 * [sizeGroup] groups format variants that share the same physical label roll.
 * [columns] is the number of columns rendered on this label (1–3).
 * [maxEntries] is the maximum number of DOPE rows that fit on this label.
 * [supportedPrinterIds] lists printer driver IDs that can physically print this format.
 */
data class LabelFormat(
    val id:                   String,
    val displayName:          String,
    val shape:                LabelShape,
    val sizeGroup:            LabelSizeGroup,
    val columns:              Int,
    val maxEntries:           Int,
    val supportedPrinterIds:  Set<String>,
)
