% !TEX root = ../Main.tex
% ==============================================================================
% Table of Contents and Lists
% ==============================================================================
% Description: This file generates the table of contents and all document lists
%              including figures, tables, equations, listings, and glossaries.
%              The formatting uses the blenderfont style for consistency.
% Author: [Your Name]
% Date: [Date]
% ==============================================================================

% ------------------------------------------------------------------------------
% Table of Contents
% ------------------------------------------------------------------------------
% Generate the main table of contents with custom formatting
% The blenderfont provides a consistent typographic style
% ------------------------------------------------------------------------------

\newcommand{\offsetA}{\vspace{-5.5em}}
\newcommand{\offsetB}{\vspace{-1em}}

\newpage
\pagestyle{fancy}
{
	% Remove title
	\let\oldcontentsname\contentsname
	\renewcommand{\contentsname}{}

	% Formatting
	\blenderfont
	\chapter*{\oldcontentsname}
	\offsetA\offsetB

	% Configure TOC page breaking to keep chapters with their sections
	% Set penalties to keep related entries together
	\begingroup
	\interlinepenalty=500      % Discourage breaks within entries
	\widowpenalty=10000        % Prevent orphaned lines
	\clubpenalty=10000         % Prevent widowed lines
	\@clubpenalty=10000        % Additional club penalty
	\brokenpenalty=10000       % Penalty for hyphenated breaks

	% Add hook to keep short chapters together on same page
	\pretocmd{\l@chapter}{%
		\needspace{10\baselineskip}% Ensure space for chapter + sections
		\nopagebreak[4]%            % Strongly discourage break after chapter
	}{}{}

	% Add vertical spacing before chapters in TOC
	\pretocmd{\l@chapter}{%
		\vspace{1.5em plus 0.5em minus 0.2em}% Add space before chapters
	}{}{}

	% Keep sections with their chapter
	\pretocmd{\l@section}{%
		\nopagebreak[3]%            % Discourage break before first sections
	}{}{}

	\tableofcontents
	\endgroup
}

% Add vertical fill to push subsequent content down
\vspace{\fill}

% ------------------------------------------------------------------------------
% Lists of Figures, Tables, Listings, and Equations
% ------------------------------------------------------------------------------
% Generate all lists on a single page with compact spacing
% The lists will only show entries if they exist
% ------------------------------------------------------------------------------
\newpage
\pagestyle{fancy}
{
	% Remove titles
	\let\oldlistfigurename\listfigurename
	\let\oldlisttablename\listtablename
	\let\oldlstlistlistingname\lstlistlistingname
	\let\oldlistequationsname\listequationsname
	\renewcommand{\listfigurename}{}
	\renewcommand{\listtablename}{}
	\renewcommand{\lstlistlistingname}{}
	\renewcommand{\listequationsname}{}

	% Formatting
	\noindent
	\blenderfont

	% List of Figures
	\chapter*{\oldlistfigurename}
	\offsetA\offsetB
	\listoffigures

	% List of Tables
	\vspace{1em}
	\chapter*{\oldlisttablename}
	\offsetA\offsetB
	\listoftables

	% List of Listings
	\vspace{1em}
	\chapter*{\oldlstlistlistingname}
	\offsetB
	\lstlistoflistings

	% List of Equations
	\vspace{1em}
	\chapter*{\oldlistequationsname}
	\offsetA\offsetB
	\listofmyequations
}

% ------------------------------------------------------------------------------
% Glossary Section
% ------------------------------------------------------------------------------
% Generate glossary and list of acronyms
% Two separate glossaries are printed:
%   1. Main glossary with technical terms
%   2. Acronym list with abbreviations
% ------------------------------------------------------------------------------
{
	\noindent
	\blenderfont

	% --- Main Glossary ---
	% Print main glossary with German header "Wort"
	{
		\renewcommand*{\entryname}{Wort}
		\newpage
		\pagestyle{fancy}
		\vspace*{-2.25em}
		\printglossary
	}

	% --- Acronym List ---
	% Print acronym glossary with German header "Abkürzung"
	{
		\renewcommand*{\entryname}{Abkürzung}
		\newpage
		\pagestyle{fancy}
		\vspace*{-2.25em}
		\printglossary[type=\acronymtype]
	}
}

% Break pages for following chapters
\AddToHook{cmd/chapter/before}{\clearpage}

% ==============================================================================
% End of Table of Contents and Lists
% ==============================================================================
