export const CLUB_DATA_MODELS = {
  club: {
    table: 'clubs',
    purpose: 'Vereinsstammdaten und organisatorische Grundeinstellungen für TT-Verein.',
    fields: [
      'id',
      'name',
      'short_name',
      'legal_name',
      'club_number',
      'email',
      'phone',
      'website',
      'street',
      'postal_code',
      'city',
      'country_code',
      'chairperson_name',
      'treasurer_name',
      'youth_manager_name',
      'creditor_identifier',
      'billing_email',
      'iban',
      'bic',
      'fee_rules',
      'is_archived',
      'archived_at',
      'created_at',
      'updated_at',
    ],
  },
  member: {
    table: 'clubmembers',
    purpose: 'Mitglied als zentrale Person im Verein mit Stammdaten, Status und Zahlungsbezug.',
    fields: [
      'id',
      'club_id',
      'user_id',
      'member_number',
      'membership_status',
      'membership_type',
      'joined_on',
      'left_on',
      'birthdate',
      'email',
      'phone',
      'street',
      'postal_code',
      'city',
      'country_code',
      'contribution_group_code',
      'needs_sepa_mandate',
      'sepa_mandate_reference',
      'is_archived',
      'archived_at',
      'archived_reason',
      'created_at',
      'updated_at',
    ],
  },
  request: {
    table: 'club_requests',
    purpose: 'Zentraler Eingang für Kontakt-, Probetraining-, Mitgliedschafts- und Sponsoringanfragen.',
    fields: [
      'id',
      'club_id',
      'request_type',
      'status',
      'workflow_stage',
      'priority',
      'source_system',
      'source_reference',
      'subject',
      'first_name',
      'last_name',
      'email',
      'phone',
      'birthdate',
      'message',
      'assigned_user_id',
      'assigned_member_id',
      'converted_member_id',
      'received_at',
      'closed_at',
      'created_at',
      'updated_at',
    ],
  },
  communicationThread: {
    table: 'club_communication_threads',
    purpose: 'Gesprächsstrang für Einzelnachrichten, Rundschreiben und spätere interne Kommunikation.',
    fields: [
      'id',
      'club_id',
      'thread_type',
      'subject',
      'status',
      'created_by_user_id',
      'scheduled_at',
      'sent_at',
      'created_at',
      'updated_at',
    ],
  },
  distributionGroup: {
    table: 'club_distribution_groups',
    purpose: 'Wiederverwendbare Verteilergruppen für Kommunikation.',
    fields: [
      'id',
      'club_id',
      'name',
      'description',
      'group_type',
      'is_system_group',
      'created_at',
      'updated_at',
    ],
  },
  event: {
    table: 'calendar_events',
    purpose: 'Vereinstermine für Training, Spiele und Vereinsveranstaltungen mit Fristen und Zuständigkeiten.',
    fields: [
      'id',
      'club_id',
      'event_type',
      'status',
      'title',
      'description',
      'location',
      'start_date',
      'end_date',
      'registration_deadline',
      'organizer_user_id',
      'notes',
      'created_at',
      'updated_at',
      'archived_at',
    ],
  },
  document: {
    table: 'club_documents',
    purpose: 'Dokumentenstamm für Satzung, Protokolle, Formulare und Vereinsdokumente mit Versionen, Sichtbarkeit und Belegbezug.',
    fields: [
      'id',
      'club_id',
      'document_type',
      'title',
      'description',
      'status',
      'current_version_no',
      'owner_user_id',
      'visibility_scope',
      'archived_at',
      'created_at',
      'updated_at',
    ],
  },
  task: {
    table: 'club_tasks',
    purpose: 'Aufgaben, Wiedervorlagen und Fristen für den Vereinsbetrieb.',
    fields: [
      'id',
      'club_id',
      'title',
      'task_type',
      'description',
      'status',
      'priority',
      'due_at',
      'remind_at',
      'created_by_user_id',
      'assigned_user_id',
      'automation_source',
      'automation_key',
      'related_entity_type',
      'related_entity_id',
      'source_snapshot',
      'created_at',
      'updated_at',
      'completed_at',
      'archived_at',
    ],
  },
  sponsor: {
    table: 'club_invoice_parties',
    purpose: 'Sponsorenbeziehung innerhalb der Rechnungsparteien mit Ansprechpartnern, Verträgen und Laufzeiten.',
    fields: [
      'id',
      'club_id',
      'party_type',
      'status',
      'name',
      'contract_reference',
      'valid_from',
      'valid_to',
      'contact_name',
      'email',
      'phone',
      'street',
      'postal_code',
      'city',
      'country_code',
      'iban',
      'bic',
      'tax_identifier',
      'notes',
      'created_at',
      'updated_at',
    ],
  },
  feeRule: {
    table: 'club_fee_rules',
    purpose: 'Beitragssätze inklusive Familienbeiträgen und Ermäßigungen.',
    fields: [
      'id',
      'club_id',
      'code',
      'name',
      'category',
      'billing_cycle',
      'base_amount_cents',
      'currency_code',
      'age_from',
      'age_to',
      'is_family_rule',
      'is_reduction_rule',
      'valid_from',
      'valid_to',
      'created_at',
      'updated_at',
    ],
  },
  sepaMandate: {
    table: 'club_sepa_mandates',
    purpose: 'SEPA-Mandate für Mitglieder oder Beitragszahler.',
    fields: [
      'id',
      'club_id',
      'member_id',
      'debtor_name',
      'iban',
      'bic',
      'mandate_reference',
      'signed_on',
      'valid_from',
      'revoked_at',
      'status',
      'history_note',
      'created_at',
      'updated_at',
    ],
  },
  account: {
    table: 'club_accounts',
    purpose: 'Vereinskonten als Grundlage für Zahlungswege, SEPA-Einzüge und spätere Finanzprozesse.',
    fields: [
      'id',
      'club_id',
      'name',
      'account_holder',
      'bank_name',
      'iban',
      'bic',
      'account_type',
      'usage_type',
      'currency_code',
      'allow_sepa_collections',
      'allow_outgoing_payments',
      'is_default',
      'status',
      'notes',
      'sort_order',
      'archived_at',
      'created_at',
      'updated_at',
    ],
  },
  paymentClaim: {
    table: 'club_payment_claims',
    purpose: 'Offene Beitragsforderungen und sonstige Zahlungsansprüche.',
    fields: [
      'id',
      'club_id',
      'member_id',
      'fee_rule_id',
      'claim_type',
      'status',
      'due_on',
      'amount_cents',
      'paid_amount_cents',
      'currency_code',
      'reminder_level',
      'last_reminder_at',
      'created_at',
      'updated_at',
      'settled_at',
      'last_paid_at',
      'archived_at',
    ],
  },
  invoice: {
    table: 'club_invoices',
    purpose: 'Ein- und Ausgangsrechnungen mit Parteien- und Dokumentenbezug.',
    fields: [
      'id',
      'club_id',
      'invoice_direction',
      'invoice_type',
      'status',
      'invoice_number',
      'external_reference',
      'party_id',
      'account_id',
      'issued_on',
      'due_on',
      'paid_on',
      'net_amount_cents',
      'tax_amount_cents',
      'gross_amount_cents',
      'currency_code',
      'description',
      'created_at',
      'updated_at',
      'archived_at',
    ],
  },
  historyEntry: {
    table: 'club_history_entries',
    purpose: 'Änderungs- und Aktivitätsprotokoll für jedes Vereinsmodul.',
    fields: [
      'id',
      'club_id',
      'entity_type',
      'entity_id',
      'action_type',
      'actor_user_id',
      'actor_member_id',
      'old_value_json',
      'new_value_json',
      'summary',
      'created_at',
    ],
  },
  roleAssignment: {
    table: 'club_user_roles',
    purpose: 'Rollenbasierte Berechtigungszuordnung für Verwaltungsnutzer.',
    fields: [
      'id',
      'club_id',
      'user_id',
      'member_id',
      'role_code',
      'valid_from',
      'valid_to',
      'is_primary',
      'created_at',
      'updated_at',
    ],
  },
};
