% ********************************************************************
% * Aufgaben                                                         *
% ********************************************************************

% Konfiguration des xSim-Pakets
% ********************************************************************

\xsimsetup{
	file-extension=xsim
	% Bezeichnungen
%	points/name=Punkt,
%	points/name-plural=Punkte,
%	points/bonus-name=Zusatzpunkt,
%	points/bonus-plural=Zusatzpunkte,
%	% Noten
%	grades/half=true, % Auf halbe Punkte runden
%	grades/round=1, % Eine Dezimalstelle
%	% Darstellung der Punkte
%	question/headings=schule-standard,
}

% Übersetzungen
% **************************************************** ****************
\DeclareExerciseTranslations{bonusquestion}{
	Fallback = bonus question,
	German = Zusatzaufgabe,
}
\DeclareExerciseTranslations{bonusquestions}{
	Fallback = bonus questions,
	German = Zusatzaufgaben,
}

\DeclareExerciseTranslations{total}{
	Fallback = total,
	German = $\Sigma$, %oder: gesamt %war: %insgesamt
}

% Metadaten
% ********************************************************************
\DeclareExerciseProperty{bearbeitungshinweis}
\DeclareExerciseProperty{symbol}

% Aufgabenstile
% ********************************************************************

% Makro zum Setzen des Symbols von Aufgaben
\newcommand{\setzeSymbol}[1]{\SetExerciseProperty{symbol}{#1}}

% Aufgabenstile und Tabellenstile laden (einzelne Files)

\loadxsimstyle{schule-default,schule-keinepunkte,schule-tcolorbox, schule-binnen, schule-randpunkte,schule-keintitel, schule-keinenummer, schule-tabelle-kurz}

% Umgebungen
% ********************************************************************

% Definiton der Aufgaben- und Lösungsumgebungen des xsim-Pakets
% --------------------------------------------------------------------
\DeclareExerciseType{aufgabe}{
	exercise-env = aufgabe,
	solution-env = loesung,
	exercise-name = \XSIMtranslate{question},
	solution-name = \XSIMtranslate{solution},
	exercise-template = schule-default,
	solution-template = schule-default,
}


\DeclareExerciseType{zusatzaufgabe}{
	exercise-env = aufgabe*,
	solution-env = loesung*,
	exercise-name = \XSIMtranslate{bonusquestion},
	solution-name = \XSIMtranslate{solution},
	exercise-template = schule-default,
	solution-template = schule-default,
}

\DeclareExerciseTranslation{German}{default-heading}{%
  \XSIMmixedcase{\GetExerciseParameter{solution-name}}en zu den
  \XSIMmixedcase{\GetExerciseParameter{exercise-name}}%
  \XSIMifeqF{\GetExerciseParameter{exercise-env}}{aufgabe}{\XSIMifeqF{\GetExerciseParameter{exercise-env}}{aufgabe*}{e}}n%
}

\DeclareExerciseTranslation{German}{collection-heading}{%
  \XSIMmixedcase{\GetExerciseParameter{solution-name}}en zu den
  \XSIMmixedcase{\GetExerciseParameter{exercise-name}}%
  \XSIMifeqF{\GetExerciseParameter{exercise-name}}{Zusatzaufgaben}{e}n%
}


%Setzten des Aufgabentemplates
\NewDocumentCommand{\setzeAufgabentemplate}{m}{
    \xsimsetup{aufgabe/template=#1}
    \xsimsetup{aufgabe*/template=#1}
}

%Setzten des Lösungtemplates
\NewDocumentCommand{\setzeLoesungentemplate}{m}{
    \xsimsetup{loesung/template=#1}
    \xsimsetup{loesung*/template=#1}
}


% Teilaufgaben
% --------------------------------------------------------------------
\ExplSyntaxOn
\bool_new:N \g__schule_in_teilaufgaben_bool
\bool_gset_false:N \g__schule_in_teilaufgaben_bool
\@ifclassloaded{beamer}{
	\newenvironment{teilaufgaben}{\begin{enumerate}[a)]
	}{\end{enumerate}}
}{
    \newlist{teilaufgabenIntern}{enumerate}{1}
    \setlist[teilaufgabenIntern]{
        label=\textbf{\alph{teilaufgabenInterni})},
        topsep=0.2em,
        itemsep=-0.1em,
    }
    \newenvironment{teilaufgaben}%
    {\bool_gset_true:N \g__schule_in_teilaufgaben_bool \begin{teilaufgabenIntern}}
    {\end{teilaufgabenIntern} \bool_gset_false:N \g__schule_in_teilaufgaben_bool}
}

\makeatletter
\NewDocumentCommand{\teilaufgabe}{o}{
	\IfInsideSolutionTF{
		% In Lösungen
		\item%
	}{
		% In Aufgaben
		\item%
		\IfNoValueF{#1}{\addpoints*{#1}(#1)\xspace}
	}
}

% Gedacht, wenn es bei Teilaufgaben kein Lösung angegeben werden soll
\newcommand{\teilaufgabeOhneLoesung}{\addtocounter{teilaufgabenInterni}{1}}

\ExplSyntaxOff

% Spezielle Aufgabentypen
% ********************************************************************

% Lücken
% --------------------------------------------------------------------
\newcommand{\verstecke}[1]{
	\IfInsideSolutionTF{#1}{}
}
\newcommand{\luecke}[2][]{%
	% Feste Lücke
	\blank[width=#2,#1]{}%
}

\newcommand{\textluecke}[2][]{%
	% Textabhängige Lücke
	% Default: Doppelte Textlänge als Lückenlänge
	% Param: 'nichts' für keine Linie o.ä.
	% (Korrekturfaktor für Handschrift)
  \ifthenelse{\equal{\detokenize{#1}}{\detokenize{nichts}}}
	{\IfInsideSolutionTF{#2}{ }} % TRUE
	{\blank[scale=2,#1]{#2}}% FALSE
}

%%%% Mit xsim nicht möglich
% \aufgabeLueckentext
%     [Optionen für die Aufgabenumgebung]
%     {Lückentext}
%     {Extras}
%     [Symbol]
% \NewDocumentCommand{\aufgabeLueckentext}{ O{} m m O{} O{} }{%
%     \begin{aufgabe}[#1,symbol=#4]%
%         %\setzeSymbol{#4}%
%         #2%
%         \begin{loesung}%
%             #2%
%         \end{loesung}%
%         #3%
%     \end{aufgabe}%
% }


% Multiple Choice
% --------------------------------------------------------------------

\DeclareExerciseProperty{mcumgebung}

%Eigentliche Multiple Choise Umgebung
\NewTasksEnvironment[label=\chb]{mc@Umgebung}[\choice](3)

%Setzen der richtigen Lösung als Option
\newcommand*{\mcrichtig}{\IfInsideSolutionTF{\chb*}{\chb}}

%Inclusive Speichern der Lösung (Maximal eine pro Aufgabe)
\NewDocumentEnvironment{mcumgebung}{+b}{
\SetExerciseProperty{mcumgebung}{\begin{mc@Umgebung}#1\end{mc@Umgebung}}%
\begin{mc@Umgebung}#1}{\end{mc@Umgebung}}

%Abrufen der Lösung
\NewDocumentCommand{\mcloesung}{}{\GetExerciseProperty{mcumgebung}}

% ********************************************************************
% * Lösungen                                                         *
% ********************************************************************

% Markierung für Seitenzahlen setzen, ACHTUNG: Wird nur ausgeführt,
% falls noch etwas kommt, d.h. Lösungen oder EWH. Sonst undefiniert!
\AtEndDocument{\label{LetzteInhaltsseite}}
\newboolean{schule@ende@inhalt@gesetzt}
\setboolean{schule@ende@inhalt@gesetzt}{false}

% Welche Art von Lösung?
\ifthenelse{\equal{\schule@loesungen}{seite}}{
    % Lösungsseite
    \AtEndDocument{
				%\label{LetzteInhaltsseite}
        \clearpage
        \ifthenelse{\boolean{schule@ende@inhalt@gesetzt}}{}{%
            \pagenumbering{Roman}%
            \setboolean{schule@ende@inhalt@gesetzt}{true}%
        }
        \chead{\Titel\schule@kopfUmbruch}
        \ohead{Lösung\schule@kopfUmbruch}
        \cfoot{\thepage}
        %\section*{Lösungen} % mit XSIM: Lösungen zu den Aufgaben in printsolutions drin?
        \printsolutions
    }
}{
    \ifthenelse{\equal{\schule@loesungen}{folgend}}{
        % auf Aufgaben folgend
        \xsimsetup{
            solution/print,
            loesung/print,
            loesung*/print,
        }
    }{
        % nichts
    }
}

% ********************************************************************
% * Bewertung und Punkte                                             *
% ********************************************************************

\newcommand{\punkteAufgabe}{%
\GetExerciseProperty{points}\xspace%
\IfExerciseGoalSingularTF{points}
    {\,\XSIMtranslate{point}}
    {\,\XSIMtranslate{points}}
}

\newcommand{\punkteTotal}{%
\TotalExerciseGoals{points}%+ bonus-points
    {\,\XSIMtranslate{point}}
    {\,\XSIMtranslate{points}}%
}

% Punktübersicht
% ********************************************************************

\NewDocumentCommand{\punktuebersicht}{s O{kurz}}{
    \ifthenelse{\equal{#1}{\BooleanTrue}}{\label{SeitePunkt}}{}
    \gradingtable[template=#2]%kurz oder: default* oder: default
}

% ********************************************************************
% Hinweise                                                           *
% ********************************************************************
% Zur Speicherung der Hinweise werden die Eigenschaften von xsim
% Aufgaben erweitert. Hierzu ist es erforderlich dem
% "SetExerciseProperty"-Makro als Wert für den Schlüssel
% "hinweise" übergeben werden.
% Um den folgenden Quelltext halbwegs lesbar zu halten, wird auf
% das environ-Paket zurückgegriffen.

% Hinweise-Umgebung
% ********************************************************************

\ExplSyntaxOn
\NewEnviron{bearbeitungshinweis}{
    \exp_args:Nno \SetExerciseProperty {bearbeitungshinweis} {\BODY}
}
\ExplSyntaxOff

% Ausgabe von Hinweisen
% ********************************************************************

% Vollständige Liste
\newcommand{\bearbeitungshinweisliste}{
    \begin{description}
        \ForEachUsedExerciseByID{%
            \def\ExerciseType{##1}%
            \def\ExerciseID{##2}%
            \GetExercisePropertyT{bearbeitungshinweis}{%
                \item[\XSIMmixedcase{\GetExerciseName}~##3]
                ####1%
            }%
        }%
    \end{description}
}

% Für eine Aufgabe
\NewDocumentCommand{\bearbeitungshinweisZuAufgabe}{O{aufgabe} m}{
    \ifthenelse{\equal{#2}{}}{
        \GetExerciseProperty{bearbeitungshinweis}%
    }{%
        \ExercisePropertyGet{#1}{#2}{bearbeitungshinweis}%
    }
}
