% !TEX root = ../../Main.tex

% ==== Colors ====
\definecolor{britishracinggreen}{rgb}{0.0, 0.26, 0.15}
\definecolor{eggplant}{rgb}{0.38, 0.25, 0.32}
\definecolor{hanblue}{rgb}{0.27, 0.42, 0.81}
\definecolor{navyblue}{rgb}{0.0, 0.0, 0.5}
\definecolor{pansypurple}{rgb}{0.47, 0.09, 0.29}
\definecolor{shockingpink}{rgb}{0.99, 0.06, 0.75}

% ==== Base Case ====
% Define a counter to track nesting level
\newcounter{coloredBoxLevel}

% Parameters:
\makeatletter
\define@key{coloredBox}{icon}{\def\coloredBoxIcon{#1}}
\define@key{coloredBox}{icon.prefix}{\def\coloredBoxIconPrefix{#1}}
\define@key{coloredBox}{icon.fontsize}{\def\coloredBoxIconSize{#1}}
\define@key{coloredBox}{icon.offset.x}{\def\coloredBoxIconOffsetX{#1}}
\define@key{coloredBox}{icon.offset.y}{\def\coloredBoxIconOffsetY{#1}}
\define@key{coloredBox}{icon.color}{\def\coloredBoxColor{#1}}
\define@key{coloredBox}{background.color}{\def\coloredBoxBackground{#1}}
\makeatother
% Define the environment
\NewEnviron{ColoredBox}[1][
   icon={\faInfoCircle},
   icon.color={blue},
   icon.prefix={},
   icon.fontsize={28pt},
   icon.offset.x={0pt},
   icon.offset.y={0pt},
   background.color={blue}
]{
   % Start of the environment
   %% Setting the keys
   \setkeys{coloredBox}{#1}

   %% Set background opacity

   % Increment the nesting level counter
   \stepcounter{coloredBoxLevel}

   % Set opacity based on the nesting level using a formula
   \FPeval{\backgroundOpacityFloat}{0.05 + 0.075 * \arabic{coloredBoxLevel}}

   % Convert the opacity to a percentage integer
   \FPeval{\backgroundOpacity}{round(\backgroundOpacityFloat * 100, 0)}

   % Always have the icon opacity 15% higher than the background
   \FPeval{\iconOpacity}{\backgroundOpacity + 20}

   %% === Content ===
   \ifnum\value{coloredBoxLevel}=1
      % Commands to only execute at the page level
      \filbreak
   \fi

   \vspace*{0.5\baselineskip}

   \noindent
   \begin{minipage}{\linewidth}
      \begin{mdframed}[
         backgroundcolor={\coloredBoxBackground!\backgroundOpacity},
         hidealllines=true,
         skipabove=0.7\baselineskip,
         skipbelow=0.7\baselineskip,
         splitbottomskip=2pt,
         splittopskip=4pt,
         roundcorner=5pt
      ]
         % [REFACTOR] using picture environment instead of tikz due to pgf errors
         \begin{picture}(\textwidth, 0)(0, 0)
            \put(\coloredBoxIconOffsetX-\coloredBoxIconSize,\coloredBoxIconOffsetY-0.7cm){
               \fontsize{\coloredBoxIconSize}{\coloredBoxIconSize}
               \selectfont
               \color{\coloredBoxColor!\iconOpacity} \coloredBoxIcon
            }
         \end{picture}
         \hspace*{0.25cm}
         \begin{minipage}{\linewidth-0.5cm}
            \vspace*{0.5\baselineskip}
            \BODY
            \vspace*{0.5\baselineskip}
         \end{minipage}
      \end{mdframed}
   \end{minipage}
   %% === /Content ===

   % Reduce the nesting level counter
   \addtocounter{coloredBoxLevel}{-1}
}
% ==== /Base Case ====

% ==== Info Box ====
% Derived from `ColoredBox`
\NewEnviron{InfoBox}[1][
   icon={\faInfoCircle},
   icon.color={blue},
   icon.prefix={},
   icon.fontsize={24pt},
   icon.offset.x={0pt},
   icon.offset.y={0pt},
   background.color={blue}
]{
   \let\iBODY\BODY
   \begin{ColoredBox}[#1]
      \iBODY
   \end{ColoredBox}
}
% ==== /Info Box ====

% ==== Warning Box ====
% Derived from `ColoredBox`
\NewEnviron{WarningBox}[1][
   icon={\faExclamationTriangle},
   icon.color={red},
   icon.prefix={},
   icon.fontsize={24pt},
   icon.offset.x={0pt},
   icon.offset.y={0pt},
   background.color={red}
]{
   \let\wBODY\BODY
   \begin{ColoredBox}[#1]
      \wBODY
   \end{ColoredBox}
}
% ==== /Warning Box ====

% ==== Success Box ====
% Derived from `ColoredBox`
\NewEnviron{SuccessBox}[1][
   icon={\faCheckCircle},
   icon.color={green},
   icon.prefix={},
   icon.fontsize={24pt},
   icon.offset.x={0pt},
   icon.offset.y={2pt},
   background.color={green}
]{
   \let\sBODY\BODY
   \begin{ColoredBox}[#1]
      \sBODY
   \end{ColoredBox}
}
% ==== /Success Box ====

% ==== Important Box ====
% Derived from `ColoredBox`
\NewEnviron{ImportantBox}[1][
   icon={\faExclamationCircle},
   icon.color={orange},
   icon.prefix={},
   icon.fontsize={24pt},
   icon.offset.x={0pt},
   icon.offset.y={0pt},
   background.color={orange}
]{
   \let\impBODY\BODY
   \begin{ColoredBox}[#1]
      \impBODY
   \end{ColoredBox}
}

% ==== Simpler Custom Boxes ====
% Environment `CustomBox`
% Usage:
%   \begin{CustomBox}{<icon>}{<color>}
%     ...
%   \end{CustomBox}
% Parameters:
\NewEnviron{CustomBox}[2]{
   \let\cBODY\BODY
   \begin{ColoredBox}[
      icon={#1},
      icon.color={#2},
      icon.prefix={},
      icon.fontsize={24pt},
      icon.offset.x={0pt},
      icon.offset.y={0pt},
      background.color={#2}
   ]
      \cBODY
   \end{ColoredBox}
}
% ==== /Simpler Custom Boxes ====

% ==== Voting results Environment ====
% Using vote-yea Icon from fontawesome
\NewEnviron{VotingResultsBox}[1]{
   \let\VotingResultsBODY\BODY
   \begin{ColoredBox}[
      icon={\faVoteYea},
      icon.color={#1},
      icon.prefix={},
      icon.fontsize={24pt},
      icon.offset.x={-0.2cm},
      icon.offset.y={0pt},
      background.color={#1}
   ]
      \VotingResultsBODY
   \end{ColoredBox}
}
% ==== /Voting results Environment ====

% ==== Voting Results ====
% Derived from `VotingResultsBox`
\NewEnviron{VotingResults}[3]{
   \let\voteBODY\BODY

   % Choose the color based on the vote results
   \ifnum#1>#2
      \def\voteColor{britishracinggreen}
   \else
      \ifnum#1<#2
         \def\voteColor{red}
      \else
         \def\voteColor{eggplant}
      \fi
   \fi

   \begin{VotingResultsBox}{\voteColor}
      \voteBODY

      \begin{multicols}{3}
         \begin{CustomBox}{\faThumbsUp}{britishracinggreen}
            \textbf{Ja:} #1
         \end{CustomBox}
         \columnbreak
         \begin{CustomBox}{\faThumbsDown}{red}
            \textbf{Nein:} #2
         \end{CustomBox}
         \columnbreak
         \begin{CustomBox}{\faQuestion}{eggplant}
            \textbf{Enthaltung:} #3
         \end{CustomBox}
      \end{multicols}
   \end{VotingResultsBox}
}
% ==== /Voting Results ====

% ==== Discussion Box ====
% Derived from `ColoredBox`
\NewEnviron{DiscussionBox}[1][
   icon={\faComments},
   icon.color={hanblue},
   icon.prefix={},
   icon.fontsize={24pt},
   icon.offset.x={0pt},
   icon.offset.y={0pt},
   background.color={hanblue}
]{
   \let\dBODY\BODY
   \begin{ColoredBox}[#1]
      \dBODY
   \end{ColoredBox}
}
% ==== /Discussion Box ====