\ProvidesPackage{komageneral}

% Base packages
\usepackage{fontspec}
\usepackage{geometry}
\usepackage[autooneside=false]{scrlayer-scrpage}  % Part of KOMA-Script bundle
\usepackage{enumitem}
\usepackage{caption}
\usepackage[protrusion=true,expansion=true,final,tracking=true,kerning=true]{microtype}
\usepackage{biblatex}
\usepackage{float}
\usepackage[table]{xcolor}
\usepackage{booktabs}
\usepackage{grffile}
\usepackage{unicode-math}
\usepackage[Export]{adjustbox}
\usepackage{graphicx}  % Needed for title page
\usepackage{etoolbox}  % For custom quote environment
\usepackage{longtable}
\usepackage{wrapfig}
\usepackage{rotating}
\usepackage[normalem]{ulem}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{capt-of}
\usepackage{hyperref}
\usepackage{array}
\usepackage[a-1a]{pdfx}
\usepackage{listings}
\usepackage{csvsimple}

\KOMAoptions{
  DIV=12,
  BCOR=10mm,
  twoside=true,
  toc=listof,
  titlepage=false,
  headings=normal,
  headsepline=true,
  footsepline=false,
  headinclude=false,
  footinclude=false,
  mpinclude=false,
  titlepage=true
}

\definecolor{darkgray}{RGB}{64,64,64}
\definecolor{lightgray}{RGB}{200,200,200}

% necessary to set max height and width for images
\adjustboxset{max size={\textwidth}{0.6\textheight}}

% Font settings
\defaultfontfeatures{RawFeature={+zero, +liga}}
\setmainfont{Noto Serif}[
    UprightFont = Noto Serif Regular,
    BoldFont = Noto Serif Bold,
    ItalicFont = Noto Serif Italic,
    BoldItalicFont = Noto Serif Bold Italic,
    Scale = 1.0,
    Ligatures = {Common, TeX},
    Numbers = {Lowercase, Proportional},
    SmallCapsFeatures = {Letters = SmallCaps},
    WordSpace = 1.1,
    PunctuationSpace = 2
]
\setsansfont{Noto Sans}[
    UprightFont = Noto Sans Regular,
    BoldFont = Noto Sans Bold,
    ItalicFont = Noto Sans Italic,
    BoldItalicFont = Noto Sans Bold Italic,
    Scale = 1.0,
    Ligatures = {Common, TeX},
    Numbers = {Lowercase, Proportional},
    SmallCapsFeatures = {Letters = SmallCaps},
    WordSpace = 1.1,
    PunctuationSpace = 2
]
\setmonofont{Noto Sans Mono Condensed}[
    Scale = 1.0
]

% better readability on screen
\linespread{1.15}

% Geometry settings
% \geometry{
%   a4paper,
%   left=2.5cm,
%   right=2.5cm,
%   top=2.5cm,
%   bottom=2.5cm,
%   marginparwidth=1.5cm
% }

% % Header and footer settings with scrlayer-scrpage
\pagestyle{scrheadings}
\clearpairofpagestyles
\automark[subsection]{section} % \automark[<right_level>]{<left_level>}
\ohead{\pagemark}
\ihead{\leftmark}
% \ihead{\pagemark}
% \chead{\Ifthispageodd{}{\@author}}
% \ohead{\Ifthispageodd{\leftmark}{\@title}}
\setkomafont{pageheadfoot}{\normalfont}
\setkomafont{pagehead}{\normalfont}

% Add lines under the header and above the footer
% \setheadsepline{0.2pt} % Thickness of the header line

% Section formatting with KOMA-Script features
\setkomafont{section}{\LARGE\bfseries\sffamily\color{darkgray}}
\setkomafont{subsection}{\Large\bfseries\sffamily\color{darkgray}}
\setkomafont{subsubsection}{\large\bfseries\sffamily\color{darkgray}}

% Define the spacing between title and content
% \RedeclareSectionCommand[beforeskip=-1sp,afterskip=0.2\baselineskip]{section}
% \RedeclareSectionCommand[beforeskip=-1sp,afterskip=0.3\baselineskip]{subsection}
% \RedeclareSectionCommand[beforeskip=-1sp,afterskip=0.4\baselineskip]{subsubsection}

\RedeclareSectionCommand[beforeskip=\baselineskip, afterskip=0.2\baselineskip, afterindent=false]{section}
\RedeclareSectionCommand[beforeskip=\baselineskip, afterskip=0.3\baselineskip, afterindent=false]{subsection}
\RedeclareSectionCommand[beforeskip=\baselineskip, afterskip=0.4\baselineskip, afterindent=false]{subsubsection}

% Define the spacing between section number and title
\renewcommand{\sectionformat}{\thesection\hspace{0.5em}}
\renewcommand{\subsectionformat}{\thesubsection\hspace{0.5em}}
\renewcommand{\subsubsectionformat}{\thesubsubsection\hspace{0.5em}}

% Set global table font to Noto Sans Condensed Light
\AtBeginEnvironment{tabular}{\fontspec{Noto Sans Condensed}}
\AtBeginEnvironment{longtable}{\fontspec{Noto Sans Condensed}}
\newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}

% Caption settings
\captionsetup{font=small, labelfont=bf}

% Custom quote environment
\AtBeginEnvironment{quote}{\itshape}

% Custom formatting commands
\newcommand{\important}[1]{\textbf{#1}}
\newcommand{\code}[1]{\texttt{#1}}

% Title page settings
\newcommand{\TitlePage}[1]{
  \begin{titlepage}
    \centering
    \vspace*{1cm}
    \includegraphics[width=0.3\textwidth]{#1}\par
    \vspace{2cm}
    {\huge\bfseries \@title\par}
    {\Large \@subtitle\par}
    \vspace{2cm}
    {\large \@author\par}
    \vspace{0.5cm}
    {\normalsize \@date\par}
  \end{titlepage}
}

% Global listing settings
\lstset{
    basicstyle=\small\ttfamily,
    breaklines=true,
    backgroundcolor=\color{lightgray!10},
    frame=single,
    rulecolor=\color{lightgray},
    showstringspaces=false,
    keepspaces=true,
    showspaces=false,
    showtabs=false,
    breakatwhitespace=false,
    tabsize=2,
    columns=fullflexible,
    aboveskip=1em,
    belowskip=1em,
    morecomment=[l]{;},
    morestring=[b]",
    literate={-}{{-}}1 {'}{{'}}{1},
    keywordstyle=\color{blue}\bfseries,
    commentstyle=\color{green!60!black}\itshape,
    stringstyle=\color{red!80!black},
    emphstyle=\color{purple}\bfseries,
    emph={defun, setq, let, if, cond, loop, car, cdr, cons}
}

\lstdefinestyle{numbers}{
  numbers=left,
  stepnumber=1,
  numberstyle=\tiny,
  numbersep=3pt
}

\let\oldtabular\tabular
\let\endoldtabular\endtabular
\renewenvironment{tabular}{\rowcolors{2}{white}{lightgray}\oldtabular}{\endoldtabular}

% Set consistent spacing for all list types
% \setlist{nosep}  % Removes vertical spacing
\setlist[description]{topsep=3pt, partopsep=0pt, parsep=0pt, itemsep=2pt, font=\normalfont\itshape}
\setlist[itemize]{topsep=3pt, partopsep=0pt, parsep=0pt, itemsep=2pt}
\setlist[enumerate]{topsep=3pt, partopsep=0pt, parsep=0pt, itemsep=2pt}

\renewcommand{\lstlistlistingname}{List of Code Snippets}
