% =======================================================================================
% Original Author: Martin Oswald (Zürich University of Applied Sciences)
% Modified by: Frederik Beimgraben (University of Applied Sciences Reutlingen)
% Description: This class is a modified version of the ZHAWReport class by Martin Oswald.
% It is used for reports at the University of Applied Sciences Reutlingen.
% =======================================================================================
% License: Creative Commons CC BY 4.0
% Creative Commons Attribution-ShareAlike 4.0 International License.
%
% You should have received a copy of the license along with this
% work. If not, see <http://creativecommons.org/licenses/by-sa/4.0/>.
% =======================================================================================

% String comparison Command
\ExplSyntaxOn
\cs_new_eq:NN \strcompare \str_if_eq:eeTF
\ExplSyntaxOff

% Suppress all warnings; Only show errors
\usepackage{silence}
\WarningsOff*

% If not using XeTeX, print an error message and stop compiling
\ifx\XeTeXversion\undefined
	\PackageError{HSRTReport}{This class can only be used with XeLaTeX.}{}
	\stop
\fi

%----------------------------------------
%   PATHS
%----------------------------------------
\def\classPath{HSRTReport}
\def\fontsPath{\classPath/Assets/Fonts}
\def\imagesPath{\classPath/Assets/Images}

%----------------------------------------
%   CLASS DEFINITION AND PARAMETERS
%----------------------------------------
% Original: ZHAWReport.cls by Martin Oswald
\NeedsTeXFormat{LaTeX2e}
\newcommand{\classname}{HSRTReport/HSRTReport}
\ProvidesClass{\classname}[2024/07/08 HSRT Report Class]
\providecommand{\baseclass}{scrreprt}

% Default options
\PassOptionsToClass{pointlessnumbers}{\baseclass}

% Forward options to the base class
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{\baseclass}}
\ProcessOptions\relax

% Load the base class with options
\LoadClass{\baseclass}

% ----------------------------------------
% Imports
% ----------------------------------------
% Load core packages first
\input{\classPath/Config/Imports-Core}
% Document structure packages
\input{\classPath/Config/Imports-Document}
% Content and typography packages
\input{\classPath/Config/Imports-Content}
% Graphics and TikZ packages
\input{\classPath/Config/Imports-Graphics}

%----------------------------------------
%   REFS
%----------------------------------------
% Hyperref already loaded in Imports-Document
\hypersetup{
	pdfpagemode={UseOutlines},
	bookmarksopen=true,
	bookmarksopenlevel=0,
	hypertexnames=false,
	colorlinks=true,
	citecolor=[rgb]{0.286, 0.427, 0.537},
	linkcolor=[rgb]{0.161, 0.31, 0.427},
	urlcolor=[rgb]{0.071, 0.212, 0.322},
	pdfstartview={FitV},
	unicode,
	breaklinks=true
}

%----------------------------------------
%   FONT SETUP
%----------------------------------------
\renewcommand*\rmdefault{lmr}
\renewcommand*\sfdefault{lmss}
\definecolor{midnightblue}{rgb}{0.094, 0.051, 0.228}

\newfontfamily\blenderfont[
	Path=\fontsPath/Blender/,
	Extension=.ttf,
	UprightFont=*-Medium,
	BoldFont=*-Bold,
	ItalicFont=*-MediumItalic,
	BoldItalicFont=*-BoldItalic
]{Blender}
\newfontfamily\dinfont[
	Path=\fontsPath/DIN/,
	Extension=.ttf,
	UprightFont=*-Regular,
	BoldFont=*-Bold,
	ItalicFont=*-Italic,
	BoldItalicFont=*-BoldItalic
]{DIN}

\setsansfont{Blender}[
	Path=\fontsPath/Blender/,
	Extension=.ttf,
	UprightFont=*-Medium,
	BoldFont=*-Bold,
	ItalicFont=*-MediumItalic,
	BoldItalicFont=*-BoldItalic
]
\setmainfont{DIN}[
	Path=\fontsPath/DIN/,
	Extension=.ttf,
	UprightFont=*-Regular,
	BoldFont=*-Bold,
	ItalicFont=*-Italic,
	BoldItalicFont=*-BoldItalic
]


%----------------------------------------
%   PAGE SETUP
%----------------------------------------

\pagestyle{fancy}

\renewcommand{\headrulewidth}{0pt}

%----------------------------------------
%   LOGOS
%----------------------------------------

% ==== Add more logos to be placed besides the main logo on the title page ====
\newcommand{\logosScale}{1}
\newcommand{\mainLogoScale}{1}

\newlength{\imageHeight}


\DeclareRobustCommand{\SetLogosScale}[1]{
	\renewcommand{\logosScale}{#1}
}

\let\newglobalarray\newarray
\patchcmd{\newglobalarray}{\edef}{\xdef}{}{}

% Set the array to expand the elements
\expandarrayelementtrue

% AddLogo Command with automatic counter
% Array to store the logos and to be used in pgffor later
\newglobalarray\LogosPaths
\newglobalarray\LogosScales
\newglobalarray\LogosOpacities
\newglobalarray\LogosExtensions
\newcounter{logoCounter}
\setcounter{logoCounter}{0}
% Command to add a logo to the array
% Usage: \AddLogoToArray{<Name>}{<Scale>}{<Opacity>}
\DeclareRobustCommand{\AddLogo}[4]{
\stepcounter{logoCounter}
\LogosPaths(\thelogoCounter)={#1}
\LogosScales(\thelogoCounter)={#2}
\LogosOpacities(\thelogoCounter)={#3}
\LogosExtensions(\thelogoCounter)={#4}
}

% Command to get opacity of a logo
\DeclareRobustCommand{\GetLogoOpacity}[1]{
	\expand{\LogosOpacities(#1)}
}

% Command to add a data line for the title page (key, value)
% Use a token register to store the data
\newtoks\titlePageData
\def\tand{&}
\titlePageData={\tand}
\DeclareRobustCommand{\AddTitlePageDataSpace}[1]{
	% Add vertical space of size #1
	\titlePageData=\expandafter{\the\titlePageData \vspace{#1}}
}
\DeclareRobustCommand{\AddTitlePageDataLine}[2]{
	\titlePageData=\expandafter{\the\titlePageData\\ \textbf{#1}\tand #2}
}

% Command to get all the data for the title page (to be inserted in tabular)
% ({tabular}{@{} p{40mm} l}) Key is always bold
\DeclareRobustCommand{\GetTitlePageDataTable}{
	\begin{tabular}{@{} p{30mm} p{\textwidth-30mm-2\tabcolsep}}
		\the\titlePageData
	\end{tabular}
}

% =============================================================================
\def\skylinePath{\classPath/Assets/Images/Skyline.svg}

\newcommand{\footerYShift}{1.5em}
\newcommand{\footerXShift}{0.7em}

% Define the logo and its position
\AtBeginPage{
	\setlength{\imageHeight}{2cm*\real{\mainLogoScale}*\real{\logosScale}*\real{0.45}}
	\begin{tikzpicture}[overlay, remember picture]
		% === Main Logo(s) ===
		\node[anchor=south east, inner sep=0pt, xshift=-\footerXShift, yshift=\footerYShift, opacity=0.0] (logo0) at (current page.south east) {
			\strcompare{\thepage}{1}{}{
				\includegraphics[height=\imageHeight]{\imagesPath/DUMMY_FOOT.png}
			}
		};
		\ifnum\thepage=1
		\else
			% For loop to place all logos
			\foreach \i in {1,...,\value{logoCounter}} {
					% Calculate name for i-1
					\pgfmathtruncatemacro{\prev}{\i-1}
					\node[anchor=east, inner sep=0pt, xshift=-0.1cm, opacity=0.3] (logo\i) at (logo\prev.west) {
						\makeatletter
						\testarray{LogosScales}(\i)
						\setlength{\imageHeight}{1.5cm*\real{\temp@macro}*\real{\logosScale}*\real{0.55}}
						\testarray{LogosExtensions}(\i)
						\let\extension\temp@macro
						\testarray{LogosOpacities}(\i)
						\let\opacity\temp@macro
						\testarray{LogosPaths}(\i)
						\ifthenelse{\equal{\extension}{svg}}{
							\begin{tikzpicture}
								\node[opacity=\opacity] {
									\includesvg[height=\imageHeight]{\classPath/Assets/Images/\temp@macro.\extension}
								};
							\end{tikzpicture}
						}{
							\begin{tikzpicture}
								\node[opacity=\opacity] {
									\includegraphics[height=\imageHeight]{\classPath/Assets/Images/\temp@macro.\extension}
								};
							\end{tikzpicture}
						}
						\makeatother
					};
				}
		\fi
		% Skyline
		\node[anchor=south west, inner sep=0pt, yshift=0em] at (current page.south west) {
			\includesvg[width=1.5\paperwidth]{\skylinePath}
		};
	\end{tikzpicture}
}

%----------------------------------------
%   TITLE PAGE
%----------------------------------------
\setkomafont{pagenumber}{\color{gray}\blenderfont\selectfont}

\fancyhf{}
\fancyhead[L]{\color{gray}\blenderfont \@title}
\fancyhead[R]{\pagemark}
\fancyfoot[C]{}

\fancypagestyle{fancy}{
	\fancyhf{}
	\fancyhead[L]{\color{gray}\blenderfont \@title}
	\fancyhead[R]{\pagemark}
	\fancyfoot[C]{}
}

% Set font for all headings
\setkomafont{disposition}{\blenderfont\bfseries}
\setkomafont{chapter}{\Large\blenderfont\bfseries}
\setkomafont{section}{\Large\blenderfont\bfseries}
\setkomafont{subsection}{\large\blenderfont\bfseries}
\setkomafont{subsubsection}{\large\blenderfont\bfseries}

\RedeclareSectionCommand[
	beforeskip=1ex,
	afterskip=0.5ex,
	style=section
]{chapter}

\RedeclareSectionCommands[
	beforeskip=0.6ex,
	afterskip=0.3ex,
]{section,subsection,subsubsection}

\newcommand{\decoRule}{\rule{.8\textwidth}{.4pt}}

%----------------------------------------
%   TABLE OF CONTENTS / FIG / TAB
%----------------------------------------
% Page Numbering in the Table of Contents
\renewcommand\cftchappagefont{\blenderfont\color{gray}}
\renewcommand\cftsecpagefont{\blenderfont\color{gray}}
\renewcommand\cftsubsecpagefont{\blenderfont\color{gray}}
\renewcommand\cftsubsubsecpagefont{\blenderfont\color{gray}}

% Chap/Sec/... Title in the Table of Contents
\renewcommand\cftchapfont{\blenderfont\color{gray}}
\renewcommand\cftsecfont{\blenderfont\color{gray}}
\renewcommand\cftsubsecfont{\blenderfont\color{gray}}
\renewcommand\cftsubsubsecfont{\blenderfont\color{gray}}

\RedeclareSectionCommands[
	tocentryformat=\blenderfont\normalsize,
	tocpagenumberformat=\blenderfont\normalsize
]{section,subsection}

% Figure and Table in the Table of Contents
\renewcommand\cftfigfont{\blenderfont\color{gray}}
\renewcommand\cftfigpagefont{\blenderfont\color{gray}}
\renewcommand\cfttabfont{\blenderfont\color{gray}}
\renewcommand\cfttabpagefont{\blenderfont\color{gray}}
\renewcommand{\cftdotsep}{1.5}

% List of equations
\newcommand{\listequationsname}{List of Equations}
\newlistof{myequations}{equ}{\listequationsname}

\newcommand{\equationname}{Equation}

% Command to add equations to the list
\newcommand{\myequations}[1]{%
	\addcontentsline{equ}{myequations}{\protect\equationname~\numberline{\theequation:} #1}\par}

\counterwithout{figure}{chapter}
\counterwithout{table}{chapter}
\counterwithout{equation}{chapter}

% ----------------------------------------
% Local Imports
% ----------------------------------------
\input{\classPath/Pages/Titlepage.tex}

% ==== Configuration Modules ====
\input{\classPath/Config/GlossarySettings}
\input{\classPath/Config/ToC}

% ==== Content Modules ====
\input{\classPath/Modules/Content/Listings}
\input{\classPath/Modules/Content/Floats}

% ==== Layout Modules ====
\input{\classPath/Modules/Layout/InfoBlocks}
\input{\classPath/Modules/Layout/Watermark}

% ==== Formatting Modules ====
\input{\classPath/Modules/Formatting/Typography}

% ==== Tool Modules ====
\input{\classPath/Modules/Tools/WordCount}
