% Copyright 2025 Daniel Nagel
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
% of this license or (at your option) any later version.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
% 
% The Current Maintainer of this work is Daniel Nagel
%
\RequirePackage{expl3}
\ProvidesExplPackage{fontawesome6}{2025/05/03}{6.7.2-2}{Font Awesome 6}

\msg_new:nnnn{fontawesome6}{incompatible-version}
  {Incompatible~version~of~Font~Awesome~already~loaded}
  {You~tried~to~load~the~fontawesome6~package~but~there~are~already~some~icons~
    from~Font~Awesome~defined~in~your~document.~This~probably~means~that~a~
    package~for~another~version~of~Font~Awesome~(likely~the~fontawesome~package~
    for~Font~Awesome~5)~is~already~loaded.~Loading~multiple~versions~is~not~
    supported.~Please~remove~all~but~one~version~of~Font~Awesome~from~your~
    document.}
\AddToHook{package/fontawesome/before}{\msg_error:nn {fontawesome6} {incompatible-version}}
\cs_if_free:NF \faHome {\msg_error:nn {fontawesome6} {incompatible-version}}

\RequirePackage{l3keys2e}

\str_new:N\l_fontawesome_style_str
\cs_new_protected:Npn\fontawesome_set_style:n{
  \str_set:Nn\l_fontawesome_style_str
}

\keys_define:nn{fontawesome6}
{
  pro .value_forbidden:n = true,
  pro .tl_set:N = \c__fontawesome_kind_tl,
  pro .default:n = pro,
  free .value_forbidden:n = true,
  free .tl_set:N = \c__fontawesome_kind_tl,
  free .default:n = free,
  fixed .bool_set:N = \c__fontawesome_fixed_bool,
  fixed .default:n = true,
  style .code:n = { \fontawesome_set_style:n{#1} }
}
\keys_set:nn{fontawesome6}{free}

\ProcessKeysOptions{fontawesome6}

\str_if_empty:NT \l_fontawesome_style_str {
  \fontawesome_set_style:n{solid}
}

\RequirePackage{xparse}

\str_case:onTF\c_sys_engine_str{
  {luatex}{}
  {xetex}{}
}{
  \RequirePackage{fontawesome6-utex-helper}
}{
  \RequirePackage{fontawesome6-generic-helper}
}

\msg_new:nnnn{fontawesome6}{icon-not-found}
  {The~requested~icon~#1~was~not~found.}
  {Maybe~you~mistyped~the~icon~name~or~you~are~using~the~wrong~version~of~Font~Awesome~6.~
    Please~check~the~Font~Awesome~Cheatsheet~to~verify~the~spelling~of~#1.~
    If~you~want~to~use~a~Pro~icon,~you~need~to~have~Font~Awesome~6~Pro~installed~and~
    use~XeLaTeX~or~LuaLaTeX.~Then~you~can~activate~Pro~with~the~[pro]~option.~
    If~you~use~XeLaTeX~or~LuaLaTeX,~you~can~also~try~updating~the~Font~Awesome~6~font~files~
    to~make~icons~of~newer~versions~of~Font~Awesome~available.}
\msg_new:nnnn{fontawesome6}{style-substitution}
  {The~requested~icon~#1~has~been~replaced~by~the~solid~version}
  {The~icon~#1~is~not~available~in~the~style~#2.~The~solid~version~will~be~used~instead.~
    To~use~a~#2~style~#1~icon,~you~probably~need~Font~Awesome~6~Pro.~
    To~use~Pro,~you~need~to~have~Font~Awesome~6~Pro~installed~and~
    use~XeLaTeX~or~LuaLaTeX.~Then~you~can~activate~Pro~with~the~[pro]~option.}

\NewDocumentCommand\faPreselectedIcon{m O{\str_use:N\l_fontawesome_style_str}}{
  \fontawesome_use_icon:nn{#2}{#1}
}
\NewDocumentCommand\faIcon{O{\str_use:N\l_fontawesome_style_str} m}{
  \fontawesome_use_icon:nn{#1}{#2}
}
\NewDocumentCommand\faStyle{m}{
  \fontawesome_set_style:n{#1}
}

\cs_new_protected:Npn\fa__select_ii:nnn#1#2#3{
  \cs_if_exist_use:cF {fa__#1_#2#3:} {
    \faPreselectedIcon{#1}#2
  }
}
\cs_new_protected:Npn\fa__select:nn#1#2{
  \cs_if_exist_use:cF {fa__#1_#2:} {
    \peek_catcode:NTF 0 {
      \fa__select_ii:nnn {#1}{#2}
    }{
      \faPreselectedIcon{#1}#2
    }
  }
}
\cs_new_protected:Npn\fa__select:nw#1{
  \peek_catcode:NTF 0 {\fa__select:nn {#1}} {\faPreselectedIcon{#1}}
}