\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{comparison}[2024-01-19 package comparison]

\RequirePackage{booktabs}
\RequirePackage{etoolbox}
\RequirePackage{tabularx}
\RequirePackage{environ}
\RequirePackage{enumitem}

% comparison environment, usage:
%
% \begin{comparison}
% 	\pro{reason why thing is good}
% 	\pro{...}
% 	\con{reason why thing is bad}
% 	\con{...}
% \end{comparison}
%
% output:
%
% Pros (2)                      Cons (2)
% ----------------------------------------------------------
%  - reason why thing is good    - reason why thing is bad
%  - ...                         - ...
%

\newcounter{pro-count}
\newcounter{pro-index}
\newcounter{con-count}
\newcounter{con-index}
\newcounter{cmp-count}
\newcounter{cmp-index}
\NewEnviron{comparison}{%
	\par%
	\setcounter{pro-count}{0}%
	\newcommand{\pro}[1]{%
		\stepcounter{pro-count}%
		\csdef{pro-\the\value{pro-count}}{##1}%
	}%
	\setcounter{con-count}{0}%
	\newcommand{\con}[1]{%
		\stepcounter{con-count}%
		\csdef{con-\the\value{con-count}}{##1}%
	}%
	\BODY%
	\def\spacing{3mm}%
	\newcommand{\halfbox}[1]{%
		\begin{minipage}[t]{\dimexpr(\linewidth - \spacing) / 2\relax}%
			##1%
		\end{minipage}%
	}%
	\begin{minipage}{\linewidth}%
		\halfbox{\strut\centering\textsc{Benefits}~(\the\value{pro-count})\strut}%
		\hfill%
		\halfbox{\strut\centering\textsc{Drawbacks}~(\the\value{con-count})\strut}%
		\par%
		\vspace*{\dimexpr-\parskip-0.5\baselineskip\relax}%
		\noindent\rule{\linewidth}{0.66pt}\par%
		\vspace*{\dimexpr-\parskip\relax}%
		\halfbox{%
			\begin{itemize}[leftmargin=5mm]%
				\setcounter{pro-index}{0}%
				\whileboolexpr{test{\ifnumcomp{\value{pro-index}}{<}{\value{pro-count}}}}{%
					\stepcounter{pro-index}%
					\item \csuse{pro-\the\value{pro-index}}%
				}%
			\end{itemize}%
		}\hfill\halfbox{%
			\begin{itemize}[leftmargin=5mm]%
				\setcounter{con-index}{0}%
				\whileboolexpr{test{\ifnumcomp{\value{con-index}}{<}{\value{con-count}}}}{%
					\stepcounter{con-index}%
					\item \csuse{con-\the\value{con-index}}%
				}%
			\end{itemize}%
		}%
	\end{minipage}%
	\par%
}

