\RequirePackage{ntnu}
\RequirePackage{xcolor}
\RequirePackage{listings}
\RequirePackage{tcolorbox}

\definecolor{code-foreground}{RGB}{248, 248, 242} % Monokai fg
\definecolor{code-background}{RGB}{39, 40, 34}    % Monokai bg
\definecolor{code-keyword}{RGB}{249, 38, 144}     % Monokai Red
\definecolor{code-string}{RGB}{230, 219, 116}     % Monokai Yellow
\definecolor{code-comment}{RGB}{117, 113, 94}     % Monokai Grey
\definecolor{code-identifier}{RGB}{166, 226, 46}  % Monokai Green

\tcbuselibrary{
  breakable,
  listings
}

% TODO: Add stuff like box chars and maybe chess pieces

\lstset{literate=
  {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1
  {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1
  {à}{{\`a}}1 {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1
  {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1
  {ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1
  {Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1
  {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1
  {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1
  {Ã}{{\~A}}1 {ã}{{\~a}}1 {Õ}{{\~O}}1 {õ}{{\~o}}1 {Ø}{{\O}}1
  {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1
  {ű}{{\H{u}}}1 {Ű}{{\H{U}}}1 {ő}{{\H{o}}}1 {Ő}{{\H{O}}}1
  {ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1
  {€}{{\euro}}1 {£}{{\pounds}}1 {«}{{\guillemotleft}}1
  {»}{{\guillemotright}}1 {ñ}{{\~n}}1 {Ñ}{{\~N}}1 {¿}{{?`}}1
}

\lstdefinestyle{monokai}{
  frame=none,
  xleftmargin=5mm,
  numbers=left,
  stepnumber=1,            % the step between two line-numbers.        
  numbersep=5pt,           % how far the line-numbers are from the code
  showspaces=false,        % show spaces adding particular underscores
  showstringspaces=false,  % underline spaces within strings
  showtabs=false,          % show tabs within strings adding particular underscores
  tabsize=2,               % default tabsize
  captionpos=b,            % caption-position
  breaklines=true,         % sets automatic line breaking
  breakatwhitespace=true,  % sets if automatic breaks should only happen at whitespace
  numberstyle=\color{white!60!black}\ttfamily,
  backgroundcolor=\color{code-background},
  basicstyle=\color{code-foreground}\ttfamily,
  keywordstyle=\color{code-keyword}\ttfamily,
  stringstyle=\color{code-string}\ttfamily,
  commentstyle=\color{code-comment}\ttfamily,
  identifierstyle=\color{code-identifier},
  emph={format_string, eff_ana_bf, permute, eff_ana_btr},
  emphstyle=\color{identifier}\ttfamily
}

\newtcbinputlisting{\codeFile}[3][]{
  title={\Large\color{white} #2},
  listing file=#2, % file path
  listing inputencoding=utf8,
  colback=code-background,
  boxrule=3pt,
  arc=0pt,
  outer arc=0pt,
  top=0pt,
  bottom=0pt,
  enlarge top by=0pt,
  enlarge bottom by=0pt,
  colframe=ntnublue,
  coltext=code-foreground,
  listing only,
  left=10pt,
  enhanced,
  breakable,
  listing options={
    style=monokai,
    language=#3
  },
  #1 % temp file
}