{%- func phpConsts(data *ConstTemplateData) -%}
<?php

namespace starfederation\datastar;

use starfederation\datastar\enums\FragmentMergeMode;

/**
 * {%s data.DoNotEdit %}
 */
class Consts
{
    public const DATASTAR_KEY = '{%s data.DatastarKey %}';
    public const VERSION = '{%s data.Version %}';
    {%- for _, d := range data.DefaultDurations %}
    // {%s= d.Description %}
    public const DEFAULT_{%s d.Name.ScreamingSnake %} = {%d durationToMs(d.Duration) %};
    {%- endfor -%}
    {%- for _, b := range data.DefaultBools %}
    // {%s= b.Description %}
    public const DEFAULT_{%s b.Name.ScreamingSnake %} = {%v b.Value %};
    {%- endfor -%}
    {%- for _, s := range data.DefaultStrings %}
    // {%s= s.Description %}}
    public const DEFAULT_{%s s.Name.ScreamingSnake %} = '{%s s.Value %}';
    {%- endfor -%}
    {%- for _, enum := range data.Enums -%}
        {%- if enum.Default != nil %}
    // {%s= enum.Description %}
    public const DEFAULT_{%s enum.Name.ScreamingSnake %} = {%s enum.Name.Pascal %}::{%s enum.Default.Name.Pascal %};
        {%- endif -%}
    {%- endfor -%}

    // Dataline literals.
    {%- for _, literal := range data.DatalineLiterals -%}
    public const {%s literal.ScreamingSnake %}_DATALINE_LITERAL = '{%s literal.Camel %} ';
    {%- endfor -%}
}
{%- endfunc -%}

{%- func phpEventType(data *ConstTemplateData) -%}
<?php

namespace starfederation\datastar\enums;

/**
 * {%s data.DoNotEdit %}
 */
enum EventType: string
{
{%- for _, enum := range data.Enums -%}
    {%- if enum.Name.Pascal == "EventType" -%}
        {%- for _, entry := range enum.Values %}
    // {%s entry.Description %}
    case {%s entry.Name.Pascal %} = '{%s entry.Value %}';
        {%- endfor -%}
    {%- endif -%}
{%- endfor -%}
}
{%- endfunc -%}

{%- func phpFragmentMergeMode(data *ConstTemplateData) -%}
<?php

namespace starfederation\datastar\enums;

/**
 * {%s data.DoNotEdit %}
 */
enum FragmentMergeMode: string
{
{%- for _, enum := range data.Enums -%}
    {%- if enum.Name.Pascal == "FragmentMergeMode" -%}
        {%- for _, entry := range enum.Values %}
    // {%s entry.Description %}
    case {%s entry.Name.Pascal %} = '{%s entry.Value %}';
        {%- endfor -%}
    {%- endif -%}
{%- endfor -%}
}
{%- endfunc -%}