import type { ProjectRevisionSourceDto, ProjectRevisionSummaryDto, ProjectSnapshotMetadataDto, } from "../types"; const sourceLabels: Record = { user: "Bearbeitung", undo: "Rückgängig", redo: "Wiederholt", restore: "Wiederherstellung", migration: "Migration", }; const commandTypeLabels: Record = { "circuit.update": "Stromkreis bearbeitet", "circuit.insert": "Stromkreis angelegt", "circuit.delete": "Stromkreis gelöscht", "circuit-device-row.update": "Gerätezeile bearbeitet", "circuit-device-row.insert": "Gerätezeile angelegt", "circuit-device-row.delete": "Gerätezeile gelöscht", "circuit-device-row.move": "Gerätezeile verschoben", "circuit-device-row.move-with-new-circuit": "Gerätezeile in neuen Stromkreis verschoben", "circuit.reorder-section": "Stromkreise sortiert", "circuit.reorder-sections": "Stromkreise bereichsübergreifend sortiert", "circuit.renumber-section": "Bereich neu nummeriert", "project-device.update": "Projektgerät bearbeitet", "project-device.insert": "Projektgerät angelegt", "project-device.delete": "Projektgerät gelöscht", "project-device.sync-rows": "Projektgerät-Verknüpfungen geändert", "project.update-settings": "Projekteinstellungen bearbeitet", "distribution-board.insert": "Verteilung angelegt", "distribution-board.update": "Verteilung bearbeitet", "distribution-board.delete": "Verteilung entfernt", "distribution-board-component.insert": "Verteilergerät angelegt", "distribution-board-component.delete": "Verteilergerät entfernt", "distribution-board-component.update": "Verteilergerät bearbeitet", "circuit-group.insert": "Stromkreisgruppe angelegt", "circuit-group.delete": "Stromkreisgruppe entfernt", "circuit-group.update": "Stromkreisgruppe bearbeitet", "circuit-group.reorder": "Stromkreisgruppen sortiert", "circuit-group.renumber": "Stromkreisgruppen neu nummeriert", "circuit.move-group": "Stromkreis in andere Gruppe verschoben", "circuit-group.delete-subtree": "Stromkreisgruppe vollständig entfernt", "circuit-group.restore-subtree": "Stromkreisgruppe vollständig wiederhergestellt", "project-floor.insert": "Geschoss angelegt", "project-floor.delete": "Geschoss entfernt", "project-room.insert": "Raum angelegt", "project-room.delete": "Raum entfernt", "project.restore-state": "Projektstand wiederhergestellt", }; export function getProjectRevisionSourceLabel( source: ProjectRevisionSourceDto ) { return sourceLabels[source]; } export function getProjectRevisionDescription( revision: ProjectRevisionSummaryDto ) { const description = revision.description?.trim(); if ( description === `Undo ${revision.commandType}` || description === `Redo ${revision.commandType}` ) { return commandTypeLabels[revision.commandType] || revision.commandType; } return ( description || commandTypeLabels[revision.commandType] || revision.commandType ); } export function getProjectSnapshotKindLabel( kind: ProjectSnapshotMetadataDto["kind"] ) { return kind === "automatic" ? "Automatisch" : "Benannt"; } export function getProjectSnapshotRevisionDescription( snapshot: ProjectSnapshotMetadataDto ) { if (snapshot.sourceRevision === 0) { return "Projektstart"; } if ( !snapshot.sourceRevisionMetadata || snapshot.sourceRevisionMetadata.revisionNumber !== snapshot.sourceRevision ) { return "Änderungsdetails nicht verfügbar"; } return `${getProjectRevisionSourceLabel( snapshot.sourceRevisionMetadata.source )}: ${getProjectRevisionDescription( snapshot.sourceRevisionMetadata )}`; } export function mergeProjectRevisionPages( current: ProjectRevisionSummaryDto[], next: ProjectRevisionSummaryDto[] ) { const byId = new Map( [...current, ...next].map((revision) => [ revision.revisionId, revision, ]) ); return [...byId.values()].sort( (left, right) => right.revisionNumber - left.revisionNumber ); }