{{ $a := . }}
{{ $works := LookupWorks $a }}
{{ $allPieces := LookupPieces $a }}

{{- /* Filter pieces for work-related categories */ -}}
{{- $workPieces := slice -}}
{{- range $_, $p := $allPieces -}}
	{{- $categoryFlags := GetCategoryFlags $p.Item -}}
	{{- if or $categoryFlags.Rezension $categoryFlags.Auszug $categoryFlags.Theaterkritik $categoryFlags.Uebersetzung $categoryFlags.Kommentar $categoryFlags.Replik $categoryFlags.Anzeige $categoryFlags.Provinienz -}}
		{{- $workPieces = append $workPieces $p -}}
	{{- end -}}
{{- end -}}

{{- if or (ne (len $works) 0) (ne (len $workPieces) 0) -}}
	<div class="mt-4 akteur-werke-section">
		<div class="py-1 rounded-lg mb-1">
			<h2 class="font-bold">
				<i class="ri-book-line mr-2"></i><u class="decoration underline-offset-3">Werke</u>
			</h2>
		</div>
		<div class="">
		{{ range $_, $w := $works }}
			<div class="mb-1.5 break-inside-avoid max-w-[95ch]">
				{{- if ne (len $w.Item.Citation.InnerXML ) 0 -}}
					<div class="indent-6">
						{{- Safe $w.Item.Citation.HTML -}}
						{{- range $_, $url := $w.Item.URLs -}}
							<span class="ml-1 whitespace-nowrap">
								<a href="{{ $url.Address }}" target="_blank" class="text-blue-600 hover:text-blue-800 text-sm">
									{{ $url.Chardata }} <i class="ri-external-link-line text-xs"></i>
								</a>
							</span>
						{{- end -}}
					</div>
				{{- end -}}
				{{ $workPieces := LookupPieces $w.Item }}
				{{ if len $workPieces }}
					<div class="mt-1">
						{{- /* Group pieces by piece ID first to combine all categories per piece, then by additional authors */ -}}
						{{- $pieceData := dict -}}
						{{- range $_, $p := $workPieces -}}
							{{- $categoryFlags := GetCategoryFlags $p.Item -}}
							{{- $categories := slice -}}
							{{- if $categoryFlags.Rezension -}}
								{{- $categories = append $categories "Rezension" -}}
							{{- end -}}
							{{- if $categoryFlags.Gedicht -}}
								{{- $categories = append $categories "Gedicht" -}}
							{{- end -}}
							{{- if $categoryFlags.Aufsatz -}}
								{{- $categories = append $categories "Aufsatz" -}}
							{{- end -}}
							{{- if $categoryFlags.Theaterkritik -}}
								{{- $categories = append $categories "Theaterkritik" -}}
							{{- end -}}
							{{- if $categoryFlags.Brief -}}
								{{- $categories = append $categories "Brief" -}}
							{{- end -}}
							{{- if $categoryFlags.Erzaehlung -}}
								{{- $categories = append $categories "Erzählung" -}}
							{{- end -}}
							{{- if $categoryFlags.Kommentar -}}
								{{- $categories = append $categories "Kommentar" -}}
							{{- end -}}
							{{- if $categoryFlags.Uebersetzung -}}
								{{- $categories = append $categories "Übersetzung" -}}
							{{- end -}}
							{{- if $categoryFlags.Auszug -}}
								{{- $categories = append $categories "Auszug" -}}
							{{- end -}}
							{{- if $categoryFlags.Replik -}}
								{{- $categories = append $categories "Replik" -}}
							{{- end -}}
							{{- if $categoryFlags.Lokalnachrichten -}}
								{{- $categories = append $categories "Lokalnachrichten" -}}
							{{- end -}}
							{{- if $categoryFlags.Lotterie -}}
								{{- $categories = append $categories "Lotterie" -}}
							{{- end -}}
							{{- if $categoryFlags.Nachruf -}}
								{{- $categories = append $categories "Nachruf" -}}
							{{- end -}}
							{{- if $categoryFlags.Weltnachrichten -}}
								{{- $categories = append $categories "Weltnachrichten" -}}
							{{- end -}}
							{{- if $categoryFlags.EinkommendeFremde -}}
								{{- $categories = append $categories "Einkommende Fremde" -}}
							{{- end -}}
							{{- if $categoryFlags.Wechselkurse -}}
								{{- $categories = append $categories "Wechselkurse" -}}
							{{- end -}}
							{{- if $categoryFlags.Buecher -}}
								{{- $categories = append $categories "Bücher" -}}
							{{- end -}}
							{{- if $categoryFlags.Lokalanzeigen -}}
								{{- $categories = append $categories "Lokalanzeigen" -}}
							{{- end -}}
							{{- if $categoryFlags.Vorladung -}}
								{{- $categories = append $categories "Vorladung" -}}
							{{- end -}}
							{{- if $categoryFlags.GelehrteNachrichten -}}
								{{- $categories = append $categories "Gelehrte Nachrichten" -}}
							{{- end -}}
							{{- if $categoryFlags.Anzeige -}}
								{{- $categories = append $categories "Anzeige" -}}
							{{- end -}}
							{{- if $categoryFlags.Proklamation -}}
								{{- $categories = append $categories "Proklamation" -}}
							{{- end -}}
							{{- if $categoryFlags.Desertionsliste -}}
								{{- $categories = append $categories "Desertionsliste" -}}
							{{- end -}}
							{{- if $categoryFlags.Notenblatt -}}
								{{- $categories = append $categories "Notenblatt" -}}
							{{- end -}}
							{{- if $categoryFlags.Vorlesungsverzeichnis -}}
								{{- $categories = append $categories "Vorlesungsverzeichnis" -}}
							{{- end -}}
							{{- if $categoryFlags.Abbildung -}}
								{{- $categories = append $categories "Abbildung" -}}
							{{- end -}}
							{{- if $categoryFlags.Ineigenersache -}}
								{{- $categories = append $categories "In eigener Sache" -}}
							{{- end -}}
							{{- if $categoryFlags.Provinienz -}}
								{{- $categories = append $categories "Provinienz" -}}
							{{- end -}}
							{{- if eq (len $categories) 0 -}}
								{{- $categories = append $categories "Beitrag" -}}
							{{- end -}}

							{{- /* Get additional authors for this specific piece */ -}}
							{{- $pieceAdditionalAuthorIDs := slice -}}
							{{- range $agentref := $p.Item.AgentRefs -}}
								{{- if and (or (eq $agentref.Category "") (eq $agentref.Category "autor")) (ne $agentref.Ref $a.ID) -}}
									{{- $pieceAdditionalAuthorIDs = append $pieceAdditionalAuthorIDs $agentref.Ref -}}
								{{- end -}}
							{{- end -}}
							{{- $sortedAdditionalAuthorIDs := sortStrings $pieceAdditionalAuthorIDs -}}

							{{- /* Store piece data by ID to combine categories and avoid duplicates */ -}}
							{{- $pieceData = merge $pieceData (dict $p.Item.ID (dict "piece" $p "categories" $categories "additionalAuthorIDs" $sortedAdditionalAuthorIDs)) -}}
						{{- end -}}

						{{- /* Now group by combined categories and additional authors */ -}}
						{{- $groupedByCategory := dict -}}
						{{- range $pieceID, $data := $pieceData -}}
							{{- $sortedCategories := sortStrings $data.categories -}}
							{{- $categoryName := joinWithUnd $sortedCategories -}}
							{{- $groupKey := printf "%s|%s" $categoryName (joinWithUnd $data.additionalAuthorIDs) -}}

							{{- $existing := index $groupedByCategory $groupKey -}}
							{{- if $existing -}}
								{{- $groupedByCategory = merge $groupedByCategory (dict $groupKey (append $existing $data.piece)) -}}
							{{- else -}}
								{{- $groupedByCategory = merge $groupedByCategory (dict $groupKey (slice $data.piece)) -}}
							{{- end -}}
						{{- end -}}

						{{- /* Display each category group */ -}}
						{{- range $groupKey, $categoryPieces := $groupedByCategory -}}
						<div>
							<span class="inline-block">
								{{- /* Extract category and additional authors from group key */ -}}
								{{- $keyParts := split $groupKey "|" -}}
								{{- $categoryName := index $keyParts 0 -}}

								{{ $categoryName }}
								{{- /* Get additional authors from first piece in group */ -}}
								{{- $firstPiece := index $categoryPieces 0 -}}
								{{- $additionalAuthorIDs := slice -}}
								{{- range $agentref := $firstPiece.Item.AgentRefs -}}
									{{- if and (or (eq $agentref.Category "") (eq $agentref.Category "autor")) (ne $agentref.Ref $a.ID) -}}
										{{- $additionalAuthorIDs = append $additionalAuthorIDs $agentref.Ref -}}
									{{- end -}}
								{{- end -}}
								{{- if $additionalAuthorIDs -}}
									{{ " " }}von {{ range $i, $authorID := $additionalAuthorIDs }}{{- if gt $i 0 }} und {{ end }}{{- $agent := GetAgent $authorID -}}{{- if and $agent (gt (len $agent.Names) 0) -}}<a href="/akteure/{{ $authorID }}" class="">{{ index $agent.Names 0 }}</a>{{- end -}}{{ end }}
								{{- end -}}{{ ":" }}
							</span>
							{{- /* Show all citations for this category inline with commas */ -}}
							{{ " " }}{{- range $pieceIndex, $p := $categoryPieces -}}
								{{- range $issueIndex, $issue := $p.Item.IssueRefs -}}
									{{- if or (gt $pieceIndex 0) (gt $issueIndex 0) }}, {{ end -}}
									{{ $issueData := GetIssue (printf "%d-%d" $issue.When.Year $issue.Nr) }}
									{{- $url := printf "/%s/%d" $issue.When $issue.Nr -}}
									{{- if $issue.Von -}}
										{{- if $issue.Beilage -}}
											{{- $url = printf "%s#beilage-%d-page-%d" $url $issue.Beilage $issue.Von -}}
										{{- else -}}
											{{- $url = printf "%s/%d" $url $issue.Von -}}
										{{- end -}}
									{{- end -}}
									<a href="{{ $url }}" class="text-blue-700 hover:text-blue-800">
										{{- if $issueData -}}
											{{ $issueData.Datum.When.Day }}.{{ $issueData.Datum.When.Month }}.{{ $issueData.Datum.When.Year }}/{{ $issue.Nr }}, S. {{ $issue.Von }}{{- if and $issue.Bis (ne $issue.Von $issue.Bis) }}-{{ $issue.Bis }}{{ end }}
										{{- else -}}
											{{ $issue.When.Day }}.{{ $issue.When.Month }}.{{ $issue.When.Year }}/{{ $issue.Nr }}, S. {{ $issue.Von }}{{- if and $issue.Bis (ne $issue.Von $issue.Bis) }}-{{ $issue.Bis }}{{ end }}
										{{- end -}}
									</a>
								{{- end -}}
							{{- end -}}
							{{- /* Add "Ganzer Beitrag" link if piece spans multiple issues */ -}}
							{{- $firstPiece := index $categoryPieces 0 -}}
							{{- if gt (len $firstPiece.Item.IssueRefs) 1 -}}
								{{ " " }}<div class="inline-flex items-center gap-1 px-2 py-1 bg-blue-50 hover:bg-blue-100 text-blue-700 hover:text-blue-800 border border-blue-200 hover:border-blue-300 rounded text-xs font-medium transition-colors duration-200">
									<i class="ri-file-copy-2-line text-xs"></i>
									<a href="{{ GetPieceURL (index $firstPiece.Item.IssueRefs 0).When.Year (index $firstPiece.Item.IssueRefs 0).Nr (index $firstPiece.Item.IssueRefs 0).Von (index $firstPiece.Item.Keys 0) }}" class="">
										Ganzer Beitrag
									</a>
								</div>
							{{- end -}}
							</div>
						{{- end -}}
					</div>
				{{ end }}
			</div>
		{{ end }}

		{{- /* Process standalone work pieces that aren't linked to specific works */ -}}
		{{- if ne (len $workPieces) 0 -}}
			{{- /* Group standalone work pieces by piece ID first to combine categories, then by additional authors */ -}}
			{{- $standalonePieceData := dict -}}
			{{- range $_, $p := $workPieces -}}
				{{- /* Skip pieces that are already covered by works above */ -}}
				{{- $isPieceInWorks := false -}}
				{{- range $_, $w := $works -}}
					{{- $workPiecesCheck := LookupPieces $w.Item -}}
					{{- range $_, $wp := $workPiecesCheck -}}
						{{- if eq $wp.Item.ID $p.Item.ID -}}
							{{- $isPieceInWorks = true -}}
						{{- end -}}
					{{- end -}}
				{{- end -}}

				{{- if not $isPieceInWorks -}}
					{{- /* Get categories for this piece */ -}}
					{{- $categoryFlags := GetCategoryFlags $p.Item -}}
					{{- $categories := slice -}}
					{{- if $categoryFlags.Rezension -}}
						{{- $categories = append $categories "Rezension" -}}
					{{- end -}}
					{{- if $categoryFlags.Auszug -}}
						{{- $categories = append $categories "Auszug" -}}
					{{- end -}}
					{{- if $categoryFlags.Theaterkritik -}}
						{{- $categories = append $categories "Theaterkritik" -}}
					{{- end -}}
					{{- if $categoryFlags.Uebersetzung -}}
						{{- $categories = append $categories "Übersetzung" -}}
					{{- end -}}
					{{- if $categoryFlags.Kommentar -}}
						{{- $categories = append $categories "Kommentar" -}}
					{{- end -}}
					{{- if $categoryFlags.Replik -}}
						{{- $categories = append $categories "Replik" -}}
					{{- end -}}
					{{- if $categoryFlags.Anzeige -}}
						{{- $categories = append $categories "Anzeige" -}}
					{{- end -}}
					{{- if $categoryFlags.Provinienz -}}
						{{- $categories = append $categories "Provinienz" -}}
					{{- end -}}

					{{- if ne (len $categories) 0 -}}
						{{- /* Get additional authors for this specific piece */ -}}
						{{- $pieceAdditionalAuthorIDs := slice -}}
						{{- range $agentref := $p.Item.AgentRefs -}}
							{{- if and (or (eq $agentref.Category "") (eq $agentref.Category "autor")) (ne $agentref.Ref $a.ID) -}}
								{{- $pieceAdditionalAuthorIDs = append $pieceAdditionalAuthorIDs $agentref.Ref -}}
							{{- end -}}
						{{- end -}}
						{{- $sortedAdditionalAuthorIDs := sortStrings $pieceAdditionalAuthorIDs -}}

						{{- /* Store piece data by ID to combine categories and avoid duplicates */ -}}
						{{- $standalonePieceData = merge $standalonePieceData (dict $p.Item.ID (dict "piece" $p "categories" $categories "additionalAuthorIDs" $sortedAdditionalAuthorIDs)) -}}
					{{- end -}}
				{{- end -}}
			{{- end -}}

			{{- /* Now group by combined categories and additional authors */ -}}
			{{- $standaloneGrouped := dict -}}
			{{- range $pieceID, $data := $standalonePieceData -}}
				{{- $sortedCategories := sortStrings $data.categories -}}
				{{- $categoryName := joinWithUnd $sortedCategories -}}
				{{- $groupKey := printf "%s|%s" $categoryName (joinWithUnd $data.additionalAuthorIDs) -}}

				{{- $existing := index $standaloneGrouped $groupKey -}}
				{{- if $existing -}}
					{{- $standaloneGrouped = merge $standaloneGrouped (dict $groupKey (append $existing $data.piece)) -}}
				{{- else -}}
					{{- $standaloneGrouped = merge $standaloneGrouped (dict $groupKey (slice $data.piece)) -}}
				{{- end -}}
			{{- end -}}

			{{- /* Display standalone work pieces */ -}}
			{{- range $groupKey, $categoryPieces := $standaloneGrouped -}}
				<div class="mb-1.5 break-inside-avoid max-w-[95ch]">
					<div class="">
						<span class="inline-block">
							{{- /* Extract category and additional authors from group key */ -}}
							{{- $keyParts := split $groupKey "|" -}}
							{{- $categoryName := index $keyParts 0 -}}

							{{ $categoryName }}
							{{- /* Get additional authors from first piece in group */ -}}
							{{- $firstPiece := index $categoryPieces 0 -}}
							{{- $additionalAuthorIDs := slice -}}
							{{- range $agentref := $firstPiece.Item.AgentRefs -}}
								{{- if and (or (eq $agentref.Category "") (eq $agentref.Category "autor")) (ne $agentref.Ref $a.ID) -}}
									{{- $additionalAuthorIDs = append $additionalAuthorIDs $agentref.Ref -}}
								{{- end -}}
							{{- end -}}
							{{- if $additionalAuthorIDs -}}
								{{ " " }}von {{ range $i, $authorID := $additionalAuthorIDs }}{{- if gt $i 0 }} und {{ end }}{{- $agent := GetAgent $authorID -}}{{- if and $agent (gt (len $agent.Names) 0) -}}<a href="/akteure/{{ $authorID }}" class="">{{ index $agent.Names 0 }}</a>{{- end -}}{{ end }}
							{{- end -}}{{ ":" }}
						</span>
						{{- /* Show all citations for this category inline with commas */ -}}
						{{ " " }}{{- range $pieceIndex, $p := $categoryPieces -}}
							{{- range $issueIndex, $issue := $p.Item.IssueRefs -}}
								{{- if or (gt $pieceIndex 0) (gt $issueIndex 0) }}, {{ end -}}
								{{ $issueData := GetIssue (printf "%d-%d" $issue.When.Year $issue.Nr) }}
								{{- $url := printf "/%s/%d" $issue.When $issue.Nr -}}
								{{- if $issue.Von -}}
									{{- if $issue.Beilage -}}
										{{- $url = printf "%s#beilage-%d-page-%d" $url $issue.Beilage $issue.Von -}}
									{{- else -}}
										{{- $url = printf "%s/%d" $url $issue.Von -}}
									{{- end -}}
								{{- end -}}
								<a href="{{ $url }}" class="text-blue-700 hover:text-blue-800">
									{{- if $issueData -}}
										{{ $issueData.Datum.When.Day }}.{{ $issueData.Datum.When.Month }}.{{ $issueData.Datum.When.Year }}/{{ $issue.Nr }}, S. {{ $issue.Von }}{{- if and $issue.Bis (ne $issue.Von $issue.Bis) }}-{{ $issue.Bis }}{{ end }}
									{{- else -}}
										{{ $issue.When.Day }}.{{ $issue.When.Month }}.{{ $issue.When.Year }}/{{ $issue.Nr }}, S. {{ $issue.Von }}{{- if and $issue.Bis (ne $issue.Von $issue.Bis) }}-{{ $issue.Bis }}{{ end }}
									{{- end -}}
								</a>
							{{- end -}}
						{{- end -}}
						{{- /* Add "Ganzer Beitrag" link if piece spans multiple issues */ -}}
						{{- $firstPiece := index $categoryPieces 0 -}}
						{{- if gt (len $firstPiece.Item.IssueRefs) 1 -}}
							{{ " " }}<div class="inline-flex items-center gap-1 px-2 py-1 bg-blue-50 hover:bg-blue-100 text-blue-700 hover:text-blue-800 border border-blue-200 hover:border-blue-300 rounded text-xs font-medium transition-colors duration-200">
								<i class="ri-file-copy-2-line text-xs"></i>
								<a href="{{ GetPieceURL (index $firstPiece.Item.IssueRefs 0).When.Year (index $firstPiece.Item.IssueRefs 0).Nr (index $firstPiece.Item.IssueRefs 0).Von (index $firstPiece.Item.Keys 0) }}" class="">
									Ganzer Beitrag
								</a>
							</div>
						{{- end -}}
					</div>
				</div>
			{{- end -}}
		{{- end -}}

		</div>
	</div>
{{ end }}
