#ifndef _RIVE_GRID_TRACK_HPP_
#define _RIVE_GRID_TRACK_HPP_
#include "rive/generated/layout/grid_track_base.hpp"
#ifdef WITH_RIVE_LAYOUT
class YGStyle;
#endif
namespace rive
{
class ContainerComponent;

// Track list a GridTrack belongs to; matches the editor enum order.
enum class GridTrackCollection : uint8_t
{
  templateColumns,
  templateRows,
  autoColumns,
  autoRows
};

// Sizing function of a track; matches the editor enum order. For the optional
// max (trackMaxType), 0 means none and the remaining values are offset by one.
enum class GridTrackSizeType : uint8_t
{
  autoSize,
  points,
  percent,
  fr
};

class GridTrack : public GridTrackBase
{
public:
  GridTrackCollection gridCollection() const
  {
    return (GridTrackCollection)collection();
  }

  void collectionChanged() override;
  void trackTypeChanged() override;
  void trackValueChanged() override;
  void trackMaxTypeChanged() override;
  void trackMaxValueChanged() override;

#ifdef WITH_RIVE_LAYOUT
  // Shared grid style mapping used by LayoutComponent::syncStyle and
  // LayoutParticipant::syncStyleChanges.
  /// Writes an explicit placement's four grid lines. Takes the raw cell and
  /// span values rather than exposing YGGridLine: that name is a yoga type
  /// alias, so it can't be forward declared, and this header reaches
  /// core_registry.hpp — pulling yoga in here would put it everywhere.
  static void syncItemLines(
      YGStyle& ygStyle,
      int32_t column,
      int32_t row,
      uint32_t columnSpan,
      uint32_t rowSpan);

  static void syncContainerStyle(
      YGStyle& ygStyle,
      ContainerComponent* owner,
      uint32_t justifyItemsValue);
  // Stack container: a synthetic 1x1 grid (minmax(0, 1fr) on both axes)
  // whose single cell is the container; children all land in cell 1,1 (see
  // syncStackItemCell stack).
  static void syncStackContainerStyle(
      YGStyle& ygStyle,
      uint32_t justifyItemsValue);
  /// Collapses a stack child into the single cell. Grid children need no
  /// counterpart: an explicit GridItemPlacement applies itself, and an
  /// auto-placed one is already at yoga's default.
  static void syncStackItemCell(YGStyle& ygStyle);
  /// Inline-axis self alignment, resolved against container context.
  static void syncItemJustifySelf(
      YGStyle& ygStyle,
      uint32_t justifySelfValue,
      bool stack,
      bool inlineHugs,
      uint32_t containerJustifyItems);
#endif

private:
  void markLayoutDirty();
};
} // namespace rive

#endif
