% Writing-model and direction setup logic.
% This layer owns default resolution and basic validation for
% inline axis, inline direction, and block progression.

\ExplSyntaxOn

\tl_new:N \l__font_inline_axis_tl
\tl_new:N \l__font_inline_direction_tl
\tl_new:N \l__font_block_progression_tl

\cs_new_protected:Npn \__font_apply_writing_defaults:
  {
    \tl_if_blank:VTF \l__font_inline_axis_tl
      { \tl_set:NV \l__font_inline_axis_tl \FontDefaultInlineAxis }
      { }
    \tl_if_blank:VTF \l__font_inline_direction_tl
      { \tl_set:NV \l__font_inline_direction_tl \FontDefaultInlineDirection }
      { }
    \tl_if_blank:VTF \l__font_block_progression_tl
      { \tl_set:NV \l__font_block_progression_tl \FontDefaultBlockProgression }
      { }
  }

\prg_new_conditional:Npnn \__font_tl_if_in_set:Nn #1#2 { TF }
  {
    \clist_set:Nn \l_tmpa_clist {#2}
    \clist_if_in:NVTF \l_tmpa_clist #1
      { \prg_return_true: }
      { \prg_return_false: }
  }

\cs_new_protected:Npn \__font_validate_writing_model:
  {
    \__font_tl_if_in_set:NnTF \l__font_inline_axis_tl { horizontal,vertical }
      { }
      {
        \PackageError{font-defaults}
          {Invalid~inline~axis~`\tl_use:N \l__font_inline_axis_tl`}
          {Use~horizontal~or~vertical.}
      }

    \str_if_eq:VnTF \l__font_inline_axis_tl { horizontal }
      {
        \__font_tl_if_in_set:NnTF \l__font_inline_direction_tl { ltr,rtl }
          { }
          {
            \PackageError{font-defaults}
              {Invalid~inline~direction~for~horizontal~axis}
              {Use~ltr~or~rtl~when~inline_axis=horizontal.}
          }
        \__font_tl_if_in_set:NnTF \l__font_block_progression_tl { ttb,btt }
          { }
          {
            \PackageError{font-defaults}
              {Invalid~block~progression~for~horizontal~axis}
              {Use~ttb~or~btt~when~inline_axis=horizontal.}
          }
      }
      {
        \__font_tl_if_in_set:NnTF \l__font_inline_direction_tl { ttb,btt }
          { }
          {
            \PackageError{font-defaults}
              {Invalid~inline~direction~for~vertical~axis}
              {Use~ttb~or~btt~when~inline_axis=vertical.}
          }
        \__font_tl_if_in_set:NnTF \l__font_block_progression_tl { ltr,rtl }
          { }
          {
            \PackageError{font-defaults}
              {Invalid~block~progression~for~vertical~axis}
              {Use~ltr~or~rtl~when~inline_axis=vertical.}
          }
      }
  }

\ExplSyntaxOff
