\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{latex-templates/PrimeManual}[2025-06-24]

% Suppress warning about \showhyphens being changed.
\let\CheckCommand\providecommand

\RequirePackage{microtype}

% Custom document properties.
%#region
	\DeclareRobustCommand*{\customer}[1]{\gdef\@customer{#1}}
	\DeclareRobustCommand*{\customerFull}[1]{\gdef\@customerFull{#1}}
	\DeclareRobustCommand*{\projectNumber}[1]{\gdef\@projectNumber{#1}}
	\DeclareRobustCommand*{\projectDesc}[1]{\gdef\@projectDesc{#1}}
	\DeclareRobustCommand*{\version}[1]{\gdef\@version{#1}}
%#endregion

% Macros to insert document properties.
%#region
	\newcommand{\sTitle}{\makeatletter{\@title}}
	\newcommand{\sAuthor}{\makeatletter{\@author}}
	\newcommand{\sDate}{\makeatletter{\@date}}
	\newcommand{\sCustomer}{\makeatletter{\@customer}}
	\newcommand{\sCustomerFull}{\makeatletter{\@customerFull}}
	\newcommand{\sProjectNumber}{\makeatletter{\@projectNumber}}
	\newcommand{\sProjectDesc}{\makeatletter{\@projectDesc}}
	\newcommand{\sProjectTitle}{\makeatletter{Project \@projectNumber : \@projectDesc}}
	\newcommand{\sVersion}{\makeatletter{\@version}}
%#endregion

% Specify Fonts
%#region
	\RequirePackage{fontspec}
	% Main font: Roboto Serif
	\setmainfont{RobotoSerif}[
		Path			= ./fonts/RobotoSerif/,
		Extension		= .ttf,
		UprightFont		= *-Light,
		BoldFont		= *-SemiBold,
		ItalicFont		= *-Italic,
		BoldItalicFont	= *-SemiBoldItalic,
	]
	% Headings & Titles font: Roboto Slab
	\setsansfont{RobotoSlab}[
		Path			= ./fonts/RobotoSlab/,
		Extension		= .ttf,
		UprightFont		= *-SemiBold,
		BoldFont		= *-Black,
	]
	% Monospace font: Roboto Mono
	\setmonofont{RobotoMono}[
		Path			= ./fonts/RobotoMono/,
		Extension		= .ttf,
		UprightFont		= *-Regular,
		BoldFont		= *-Bold,
		ItalicFont		= *-Italic,
		BoldItalicFont	= *-BoldItalic,
	]
%#endregion

% Page Layout
%#region
	\RequirePackage[pass]{geometry}
%#endregion

% Title & Heading Options
%#region
	\RequirePackage[sf,raggedright]{titlesec}
%#endregion

% Header & Footer Options
%#region
	\pagestyle{plain}
%#endregion

% Color import and definition
%#region
	\RequirePackage{xcolor}
	\definecolor{PrimeBlue}{RGB}{25,45,145}
%#endregion

% Use Hyperref to automatically create links in the document
%#region
	\RequirePackage{hyperref}
	\hypersetup{colorlinks=true, allcolors=PrimeBlue}
%#endregion

% Graphics package for including images
%#region
	\RequirePackage{graphicx}
	\RequirePackage{calc}
%#endregion

% Define custom title page.
%#region
\newcommand{\PrimeTitlePage}{
	\begin{titlepage}
		\begin{sffamily}
			{\raggedright\noindent\large
				\vspace*{\stretch{1}}

				\sCustomerFull
				\medbreak
				\sProjectTitle
				\bigbreak
				{\Huge \sTitle}
				\vfill
				{\leavevmode
					% Move the rule graphic to 0.25 in from the left edge of the 
					% paper and vertically centered on the heartbeat graphic.
					\put(-\oddsidemargin-0.75in,10pt){
						\includegraphics{graphics/prime_rule.pdf}
					}
					% The numbers here are just what looks good.
					\put(100pt,0pt){
						\includegraphics{graphics/prime_heartbeat.pdf}
					}
				}
				
				\sAuthor

				Revision \sVersion
				
				\sDate
				\vfill
			}
        \end{sffamily}
    \end{titlepage}
}
%#endregion

% Paragraph formatting.
%#region
	\setlength{\parindent}{0pt}
	\setlength{\parskip}{2ex plus 0.5ex minus 0.5ex}
%#endregion

% Table formatting.
%#region
	\renewcommand{\arraystretch}{1.5}
	\RequirePackage{csvsimple}
	\RequirePackage{longtable}
	\RequirePackage{colortbl}
	\RequirePackage{booktabs}

	\newcommand{\bandedrows}{\rowcolors{2}{white}{gray!10}}
%#endregion

% Glossary formatting.
%#region
	\RequirePackage[nopostdot,toc,sort=standard]{glossaries}
%#endregion

% Index formatting.
%#region
	\RequirePackage{makeidx}
	\RequirePackage{xstring}
	\newcommand{\idx}[1]{\StrSubstitute{#1}{!}{ }\index{#1}}
%#endregion

% Margin Note formatting.
%#region
	\RequirePackage{marginnote}
	% -38pt seems to be just the right vertical adjustment to align margin notes
	% with the reference in the text.
	%\renewcommand{\marginnotevadjust}{-38pt}
	\renewcommand{\marginfont}{\small\color{PrimeBlue}}

	% Title formatting for margin notes.
	\newcommand{\margintitle}[1]{\paragraph{\textbf{#1}}}

	% Put a glossary definition in a margin note. 
	% Optional parameter is vertical adjustment of the note.
	\newcommand{\margindef}[2][0pt]{%
		\index{\glsentryname{#2}}% Add a reference to this in the index.
		\textbf{\gls{#2}}% This is the text that appears on the page.
		\marginnote{% Create the margin note.
			\textsf{\textbf{
				\Glsentryname{#2}:% Create the title of the margin note.
			}}
			\glsdesc*{#2}}[#1]% Create the text of the margin note.
	}

	% Put a footnote in a margin note.
	% Optional parameter is vertical adjustment of the note.
	\newcommand{\mnote}[2][0pt]{\footnotemark\marginnote{\footnotemark[\value{footnote}]#2}[#1]}
%#endregion

% Cross references
%#region
	\newcommand{\sectionRef}[3][]{#1 \ref{#2:#3}: #3}
	
	\newcommand{\lblGeneral}[4][]{
		\if\relax\detokenize{#1}\relax % Check if #1 is empty string.
			#3{#2}\label{#4:#2}
		\else
			#3{#2}\label{#4:#1}
		\fi
	}
	\newcommand{\lblChapter}[2][]{
		\lblGeneral[#1]{#2}{\chapter}{ch}
	}
	\newcommand{\lblSection}[2][]{
		\lblGeneral[#1]{#2}{\section}{sec}
	}
	\newcommand{\lblSubsection}[2][]{
		\lblGeneral[#1]{#2}{\subsection}{subsec}
	}
	\newcommand{\lblSubsubsection}[2][]{
		\lblGeneral[#1]{#2}{\subsubsection}{sssec}
	}
	\newcommand{\lblParagraph}[2][]{
		\lblGeneral[#1]{#2}{\paragraph}{par}
	}
	\newcommand{\lblSubparagraph}[2][]{
		\lblGeneral[#1]{#2}{\subparagraph}{subpar}
	}
	\newcommand{\lblTable}[2][]{
		\textbf{\lblGeneral[#1]{#2}{\caption}{tbl}}
	}
%#endregion