export const CLUB_TASK_DEFINITIONS = [
  {
    key: 'request_contact_reply',
    label: 'Kontaktanfrage beantworten',
    source: 'club_requests',
    category: 'Anfragen',
    workflow: 'Anfragebearbeitung',
    trigger: 'Kontaktanfrage ist offen oder wartet auf Rückmeldung.',
    description: 'Antwort an eine allgemeine Kontaktanfrage vorbereiten und den nächsten Vereinskontakt sichern.',
    suggestedAction: 'Antwort verfassen und zuständige Person festlegen.',
    nextTaskTypes: [],
  },
  {
    key: 'request_schedule_trial_training',
    label: 'Probetraining organisieren',
    source: 'club_requests',
    category: 'Anfragen',
    workflow: 'Probetraining',
    trigger: 'Probetraining wurde angefragt und noch nicht konkret terminiert.',
    description: 'Probetraining terminieren, Ansprechpartner bestimmen und Rückmeldung an den Interessenten senden.',
    suggestedAction: 'Termin abstimmen, Trainingsgruppe auswählen, Einladung senden.',
    nextTaskTypes: ['request_trial_training_follow_up'],
  },
  {
    key: 'request_trial_training_follow_up',
    label: 'Nach Probetraining Rückmeldung einholen',
    source: 'club_requests',
    category: 'Anfragen',
    workflow: 'Probetraining',
    trigger: 'Probetraining-Anfrage ist in Bearbeitung oder wartet auf Entscheidung.',
    description: 'Nach dem Probetraining Rückmeldung einholen und über Mitgliedsantrag oder Absage entscheiden.',
    suggestedAction: 'Trainerfeedback holen und nächsten Schritt festlegen.',
    nextTaskTypes: [],
  },
  {
    key: 'request_membership_review',
    label: 'Mitgliedsanfrage prüfen',
    source: 'club_requests',
    category: 'Anfragen',
    workflow: 'Mitgliedschaft',
    trigger: 'Mitgliedsanfrage ist offen oder unvollständig.',
    description: 'Mitgliedsantrag prüfen, fehlende Unterlagen nachfordern und Aufnahme vorbereiten.',
    suggestedAction: 'Unterlagen prüfen und Aufnahmeprozess anstoßen.',
    nextTaskTypes: ['membership_prepare_admission'],
  },
  {
    key: 'membership_prepare_admission',
    label: 'Aufnahme vorbereiten',
    source: 'club_requests',
    category: 'Anfragen',
    workflow: 'Mitgliedschaft',
    trigger: 'Mitgliedsanfrage wurde fachlich geprüft und soll in die Aufnahme überführt werden.',
    description: 'Aufnahmeentscheidung vorbereiten, Freigaben einholen und die formale Übernahme in den Verein anstoßen.',
    suggestedAction: 'Aufnahmestatus klären und Übergang in die Mitgliedsdaten vorbereiten.',
    nextTaskTypes: ['membership_create_member_record'],
  },
  {
    key: 'membership_create_member_record',
    label: 'Mitgliedsdatensatz anlegen',
    source: 'club_requests',
    category: 'Mitglieder',
    workflow: 'Mitgliedschaft',
    trigger: 'Aufnahme ist entschieden und der Datensatz muss im Verein sauber angelegt oder geprüft werden.',
    description: 'Mitglied im System anlegen, Stammdaten prüfen und den Vereinskontext vollständig herstellen.',
    suggestedAction: 'Mitgliedsnummer, Status und Basisdaten vervollständigen.',
    nextTaskTypes: ['membership_collect_sepa_mandate'],
  },
  {
    key: 'membership_collect_sepa_mandate',
    label: 'SEPA für neues Mitglied einholen',
    source: 'club_requests',
    category: 'Finanzen',
    workflow: 'Mitgliedschaft',
    trigger: 'Neues Mitglied ist angelegt, aber der Beitragseinzug muss noch vorbereitet werden.',
    description: 'SEPA-Mandat für das neu aufgenommene Mitglied organisieren und den Beitragseinzug vorbereiten.',
    suggestedAction: 'Mandatsformular anfordern, prüfen oder zur Unterschrift versenden.',
    nextTaskTypes: ['membership_assign_fee'],
  },
  {
    key: 'membership_assign_fee',
    label: 'Beitragszuordnung prüfen',
    source: 'club_requests',
    category: 'Finanzen',
    workflow: 'Mitgliedschaft',
    trigger: 'Mitglied ist angelegt und finanzseitig in die richtige Beitragslogik einzuordnen.',
    description: 'Passenden Beitragssatz, Ermäßigung oder Familienbeitrag für das neue Mitglied prüfen.',
    suggestedAction: 'Beitragsregel festlegen und Zuordnung kontrollieren.',
    nextTaskTypes: [],
  },
  {
    key: 'request_sponsoring_reply',
    label: 'Sponsoringanfrage nachfassen',
    source: 'club_requests',
    category: 'Anfragen',
    workflow: 'Sponsoring',
    trigger: 'Sponsoringanfrage ist offen oder wartet auf Vereinsreaktion.',
    description: 'Erstkontakt zu Sponsoringanfragen strukturieren und den nächsten Gesprächstermin vorbereiten.',
    suggestedAction: 'Ansprechpartner festlegen und Antwort mit weiterem Vorgehen senden.',
    nextTaskTypes: ['sponsoring_prepare_offer'],
  },
  {
    key: 'sponsoring_prepare_offer',
    label: 'Sponsoringangebot vorbereiten',
    source: 'club_requests',
    category: 'Sponsoring',
    workflow: 'Sponsoring',
    trigger: 'Erstkontakt ist erfolgt und ein konkretes Angebot soll vorbereitet werden.',
    description: 'Sponsoringpaket, Leistungen und Konditionen für den nächsten Kontakt bündeln.',
    suggestedAction: 'Leistungen abstimmen und Angebot oder Mustervertrag vorbereiten.',
    nextTaskTypes: ['sponsoring_follow_up'],
  },
  {
    key: 'sponsoring_follow_up',
    label: 'Nach Sponsoringangebot nachfassen',
    source: 'club_requests',
    category: 'Sponsoring',
    workflow: 'Sponsoring',
    trigger: 'Sponsoringangebot wurde versendet und eine Rückmeldung steht noch aus.',
    description: 'Nachfassen, Rückfragen klären und bei Zusage den Übergang in die Rechnungsanlage vorbereiten.',
    suggestedAction: 'Rückmeldung einholen und Rechnungs- oder Vertragsstart anstoßen.',
    nextTaskTypes: [],
  },
  {
    key: 'document_review_required',
    label: 'Dokument prüfen und freigeben',
    source: 'club_documents',
    category: 'Dokumente',
    workflow: 'Dokumentenpflege',
    trigger: 'Satzung, Protokoll oder Nachweis wartet auf Prüfung oder Aktualisierung.',
    description: 'Wichtige Vereinsdokumente nach Änderungen oder in regelmäßigen Abständen prüfen.',
    suggestedAction: 'Inhalt prüfen, Freigabe dokumentieren und Version sauber archivieren.',
    nextTaskTypes: [],
  },
  {
    key: 'sponsor_contract_renewal',
    label: 'Sponsoringvertrag verlängern',
    source: 'club_invoice_parties',
    category: 'Sponsoring',
    workflow: 'Sponsoring',
    trigger: 'Ein Sponsoringvertrag läuft bald aus.',
    description: 'Laufenden Sponsorvertrag rechtzeitig prüfen und die Verlängerung oder Nachverhandlung vorbereiten.',
    suggestedAction: 'Kontakt aufnehmen, Laufzeit abstimmen und Vertragsverlängerung vorbereiten.',
    nextTaskTypes: [],
  },
  {
    key: 'member_missing_email',
    label: 'Mitgliedsdaten ergänzen: E-Mail',
    source: 'members',
    category: 'Mitglieder',
    workflow: 'Datenqualität',
    trigger: 'Aktives Mitglied ohne E-Mail-Adresse.',
    description: 'Entsteht, wenn bei einem aktiven Mitglied keine E-Mail-Adresse gepflegt ist.',
    suggestedAction: 'Kontakt aufnehmen und E-Mail nachpflegen.',
    nextTaskTypes: [],
  },
  {
    key: 'member_missing_birthdate',
    label: 'Mitgliedsdaten ergänzen: Geburtsdatum',
    source: 'members',
    category: 'Mitglieder',
    workflow: 'Datenqualität',
    trigger: 'Aktives Mitglied ohne Geburtsdatum.',
    description: 'Entsteht, wenn bei einem aktiven Mitglied kein Geburtsdatum gepflegt ist.',
    suggestedAction: 'Geburtsdatum verifizieren und im Datensatz ergänzen.',
    nextTaskTypes: [],
  },
  {
    key: 'member_missing_sepa_mandate',
    label: 'SEPA-Mandat einholen',
    source: 'club_sepa_mandates',
    category: 'Finanzen',
    workflow: 'Beitragseinzug',
    trigger: 'Aktives Mitglied ohne aktives SEPA-Mandat.',
    description: 'Entsteht, wenn ein aktives Mitglied noch kein aktives SEPA-Mandat hat.',
    suggestedAction: 'Mandatsformular anfordern oder zur Unterschrift versenden.',
    nextTaskTypes: [],
  },
  {
    key: 'payment_claim_due_soon',
    label: 'Fällige Zahlung vorbereiten',
    source: 'club_payment_claims',
    category: 'Finanzen',
    workflow: 'Zahlungseingänge',
    trigger: 'Forderung ist bald fällig, aber noch nicht überfällig.',
    description: 'Vor Fälligkeit prüfen, ob der Beitragseinzug oder die Zahlungserinnerung vorbereitet ist.',
    suggestedAction: 'Einzug oder Zahlungserinnerung vorbereiten.',
    nextTaskTypes: [],
  },
  {
    key: 'payment_claim_overdue',
    label: 'Überfällige Zahlung nachfassen',
    source: 'club_payment_claims',
    category: 'Finanzen',
    workflow: 'Zahlungseingänge',
    trigger: 'Forderung ist überfällig.',
    description: 'Überfällige Beiträge priorisiert nachverfolgen und den nächsten Mahn- oder Kontakt-Schritt auslösen.',
    suggestedAction: 'Mitglied kontaktieren oder Mahnstufe erhöhen.',
    nextTaskTypes: [],
  },
  {
    key: 'payment_claim_reminder',
    label: 'Mahnstufe prüfen',
    source: 'club_payment_claims',
    category: 'Finanzen',
    workflow: 'Zahlungseingänge',
    trigger: 'Offene Forderung hat bereits eine Mahnstufe.',
    description: 'Bestehende Mahnfälle prüfen und entscheiden, ob eine weitere Eskalation oder Klärung nötig ist.',
    suggestedAction: 'Mahnung, Rücksprache oder Teilzahlungsentscheidung vorbereiten.',
    nextTaskTypes: [],
  },
  {
    key: 'invoice_outgoing_due_soon',
    label: 'Ausgangsrechnung nachverfolgen',
    source: 'club_invoices',
    category: 'Finanzen',
    workflow: 'Rechnungen',
    trigger: 'Ausgangsrechnung ist gestellt und bald fällig.',
    description: 'Offene Ausgangsrechnung kurz vor Fälligkeit aktiv beobachten und Kontakt vorbereiten.',
    suggestedAction: 'Zahlungseingang prüfen oder Erinnerung vorbereiten.',
    nextTaskTypes: [],
  },
  {
    key: 'invoice_outgoing_overdue',
    label: 'Überfällige Ausgangsrechnung nachfassen',
    source: 'club_invoices',
    category: 'Finanzen',
    workflow: 'Rechnungen',
    trigger: 'Ausgangsrechnung ist überfällig und noch nicht bezahlt.',
    description: 'Überfällige Forderung im Vereinskontext verfolgen und weitere Schritte einleiten.',
    suggestedAction: 'Erinnerung senden, Sponsorenkontakt aufnehmen oder Klärung einleiten.',
    nextTaskTypes: [],
  },
  {
    key: 'invoice_incoming_due_soon',
    label: 'Eingangsrechnung einplanen',
    source: 'club_invoices',
    category: 'Finanzen',
    workflow: 'Rechnungen',
    trigger: 'Eingangsrechnung ist bald fällig.',
    description: 'Offene Eingangsrechnung rechtzeitig für Zahlung und Freigabe vorbereiten.',
    suggestedAction: 'Konto prüfen, Freigabe sichern und Zahlung einplanen.',
    nextTaskTypes: [],
  },
  {
    key: 'invoice_incoming_overdue',
    label: 'Überfällige Eingangsrechnung klären',
    source: 'club_invoices',
    category: 'Finanzen',
    workflow: 'Rechnungen',
    trigger: 'Eingangsrechnung ist überfällig.',
    description: 'Überfällige Eingangsrechnung auf offenen Zahlungsbedarf oder Klärung prüfen.',
    suggestedAction: 'Zahlung veranlassen oder Lieferantenkontakt aufnehmen.',
    nextTaskTypes: [],
  },
  {
    key: 'communication_delivery_retry',
    label: 'Versandfehler nachfassen',
    source: 'club_communication',
    category: 'Kommunikation',
    workflow: 'Versand',
    trigger: 'Kommunikationsvorgang hat retry-fähige Zustellfehler.',
    description: 'Fehlgeschlagene Zustellung prüfen, Empfängerdaten korrigieren oder erneuten Versand auslösen.',
    suggestedAction: 'Fehler prüfen, E-Mail korrigieren und erneut senden.',
    nextTaskTypes: [],
  },
  {
    key: 'calendar_event_prepare',
    label: 'Termin vorbereiten',
    source: 'calendar_events',
    category: 'Termine',
    workflow: 'Terminorganisation',
    trigger: 'Termin rückt näher.',
    description: 'Entsteht vor anstehenden Vereins- und Kalenderterminen als organisatorische Wiedervorlage.',
    suggestedAction: 'Verantwortliche, Räume, Kommunikation und offene Punkte prüfen.',
    nextTaskTypes: ['calendar_event_deadline_check'],
  },
  {
    key: 'calendar_event_deadline_check',
    label: 'Terminfrist prüfen',
    source: 'calendar_events',
    category: 'Termine',
    workflow: 'Terminorganisation',
    trigger: 'Termin oder Frist steht kurzfristig bevor.',
    description: 'Kurzfristige Frist oder Veranstaltung vor Durchführung auf Vollständigkeit und Kommunikation prüfen.',
    suggestedAction: 'Teilnehmerstand, Erinnerungen und letzte Freigaben prüfen.',
    nextTaskTypes: [],
  },
];

export const CLUB_WORKFLOW_SOURCES = [
  {
    key: 'club_requests',
    label: 'Anfragen',
    description: 'Kontakt-, Probe- und Mitgliedsanfragen erzeugen Aufgaben entlang des Aufnahme-Workflows.',
    examples: ['Kontaktanfrage beantworten', 'Probetraining organisieren', 'Mitgliedsanfrage prüfen'],
  },
  {
    key: 'members',
    label: 'Mitgliederdaten',
    description: 'Fehlende Stammdaten wie E-Mail oder Geburtsdatum werden als Datenqualitäts-Aufgaben erkannt.',
    examples: ['E-Mail ergänzen', 'Geburtsdatum ergänzen'],
  },
  {
    key: 'club_sepa_mandates',
    label: 'SEPA-Mandate',
    description: 'Fehlende oder notwendige SEPA-Mandate werden als Finanz- und Onboarding-Aufgaben erzeugt.',
    examples: ['SEPA-Mandat einholen'],
  },
  {
    key: 'club_payment_claims',
    label: 'Forderungen',
    description: 'Offene, fällige und gemahnte Beitragsforderungen erzeugen Nachfass- und Mahnaufgaben.',
    examples: ['Fällige Zahlung vorbereiten', 'Mahnstufe prüfen'],
  },
  {
    key: 'club_invoices',
    label: 'Rechnungen',
    description: 'Offene Ausgangs- und Eingangsrechnungen erzeugen finanzielle Wiedervorlagen entlang der Fälligkeit.',
    examples: ['Ausgangsrechnung nachverfolgen', 'Eingangsrechnung einplanen'],
  },
  {
    key: 'club_documents',
    label: 'Dokumente',
    description: 'Satzungen, Protokolle und Nachweise erzeugen Prüf- und Freigabeaufgaben.',
    examples: ['Dokument prüfen und freigeben'],
  },
  {
    key: 'club_invoice_parties',
    label: 'Sponsoren',
    description: 'Laufende Sponsorenbeziehungen erzeugen Vertragsverlängerungen und Nachfassaufgaben.',
    examples: ['Sponsoringvertrag verlängern', 'Sponsoringangebot vorbereiten'],
  },
  {
    key: 'club_communication',
    label: 'Kommunikation',
    description: 'Retry-fähige Versandfehler werden als Kommunikationsaufgaben sichtbar gemacht.',
    examples: ['Versandfehler nachfassen'],
  },
  {
    key: 'calendar_events',
    label: 'Termine',
    description: 'Bevorstehende Termine und Fristen erzeugen organisatorische Vorbereitungsaufgaben.',
    examples: ['Termin vorbereiten', 'Terminfrist prüfen'],
  },
];

export function getClubTaskDefinitionMap() {
  return CLUB_TASK_DEFINITIONS.reduce((accumulator, definition) => {
    accumulator[definition.key] = definition;
    return accumulator;
  }, {});
}
