// This file is auto-generated by alef — DO NOT EDIT.
// alef:hash:4e15143f4af1ae8bafbdb1506ef057da924484c66a19483966333558ad437e75
// To regenerate: alef generate
// To verify freshness: alef verify --exit-code
// Issues & docs: https://github.com/kreuzberg-dev/alef
package dev.kreuzberg;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;

/**
 * Which table structure recognition model to use.
 *
 * Controls the model used for table cell detection within layout-detected
 * table regions. Wire format is snake_case in all serializers (JSON, TOML,
 * YAML).
 */
public enum TableModel {
    /**
     * TATR (Table Transformer) -- default, 30MB, DETR-based row/column detection.
     */
    Tatr("tatr"),
    /** SLANeXT wired variant -- 365MB, optimized for bordered tables. */
    SlanetWired("slanet_wired"),
    /** SLANeXT wireless variant -- 365MB, optimized for borderless tables. */
    SlanetWireless("slanet_wireless"),
    /** SLANet-plus -- 7.78MB, lightweight general-purpose. */
    SlanetPlus("slanet_plus"),
    /** Classifier-routed SLANeXT: auto-select wired/wireless per table. */
    SlanetAuto("slanet_auto"),
    /**
     * Disable table structure model inference entirely; use heuristic path only.
     */
    Disabled("disabled");

    /** The string value. */
    private final String value;

    TableModel(final String value) {
        this.value = value;
    }

    /** Returns the string value. */
    @JsonValue
    public String getValue() {
        return value;
    }

    /** Creates an instance from a string value. */
    @JsonCreator
    public static TableModel fromValue(final String value) {
        for (TableModel e : values()) {
            if (e.value.equalsIgnoreCase(value)) {
                return e;
            }
        }
        throw new IllegalArgumentException("Unknown value: " + value);
    }

    /** Returns the wire-format string value (matches JSON serialization). */
    @Override
    public String toString() {
        return value;
    }
}
