/**
 * TypeScript-Datentypen für den Founding-Wizard.
 *
 * Die Wizard-Eingaben werden in localStorage gespeichert und beim Submit
 * an die document-generator API geschickt zur Template-Befüllung.
 */

import type { LifecycleStage } from './template-categories'

export interface Gesellschafter {
  id: string
  rolle: 'founder' | 'investor' | 'family' | 'other'
  name: string
  geburtsdatum?: string  // YYYY-MM-DD
  adresse: string
  email?: string
  /** Nennbetrag in EUR, z.B. 25000 */
  nennbetrag_eur: number
  /** Anteilsnummer beginnend bei 1 */
  anteil_nr: number
  /** prozentualer Anteil am Stammkapital (computed) */
  anteil_pct?: number
  is_geschaeftsfuehrer: boolean
  /** Bei GF: interne Rolle z.B. CEO/CTO */
  internal_role?: string
  /** Falls Gründer akademischen Hintergrund hat (Professur etc.) */
  has_academic_background?: boolean
  /** IP-Bereiche die der Gründer für die GmbH einbringt (z.B. ["Compliance-Engine", "RAG-Pipeline"]) */
  ip_areas?: string[]
}

export interface NotarData {
  notary_name: string
  notary_place: string
  notary_address?: string
  notary_email?: string
  notarial_date?: string  // YYYY-MM-DD, geplant
  urnr?: string  // wird vom Notar vergeben
}

export interface CompanyBasics {
  company_name: string
  legal_form: 'GmbH' | 'UG'
  company_seat: string  // z.B. "Bietigheim-Bissingen"
  company_address: string
  company_purpose_description: string  // Volltext für § 2 Satzung
  company_purpose_bullets: string[]
  industry: string
  business_year: string  // z.B. "Kalenderjahr"
  has_research_focus: boolean
  /** Registergericht (z.B. "Amtsgericht Stuttgart"). Pflicht für HRB-Anmeldung. */
  register_court?: string
  /** HRB-Nummer (z.B. "HRB 12345"). Leer falls noch nicht eingetragen. */
  hrb_number?: string
}

export interface CapitalConfig {
  stammkapital_eur: number  // z.B. 25000
  einlage_method: 'Geld' | 'Sacheinlage' | 'Geld und Sacheinlage'
  einlage_quote_initial_pct: number  // z.B. 50 oder 100
  has_sacheinlage: boolean
}

export interface SHAConfig {
  has_sha: boolean
  vesting_months: number  // Standard 48
  cliff_months: number  // Standard 12
  drag_along_threshold_pct: number  // Standard 75
  tag_along_threshold_pct: number  // Standard 20
  reserved_matters_majority_pct: number  // Standard 75
  has_beirat: boolean
  has_texas_shootout: boolean
  has_ceo_designation: boolean
  ceo_name?: string  // ref to gesellschafter.name
  esop_pool_pct: number  // Standard 0 oder 10
}

export interface GFContract {
  gesellschafter_id: string  // ref to gesellschafter.id
  gross_annual_salary_eur: number
  has_bonus: boolean
  has_company_car: boolean
  has_bav: boolean
  vacation_days: number  // Standard 30
  kuendigungsfrist_gesellschaft_monate: number  // Standard 6
  kuendigungsfrist_gf_monate: number  // Standard 3
  para_181_release: boolean
  sv_status: 'sozialversicherungsfrei' | 'sozialversicherungspflichtig' | 'noch zu klären'
}

/**
 * Vollständiger Wizard-State.
 * Wird Step-by-Step befüllt, in localStorage gespeichert,
 * und beim Submit an /api/v1/founding-wizard/generate geschickt.
 */
export interface FoundingWizardState {
  /** Aktueller Step (1-8) */
  current_step: number
  /** Lifecycle-Stage Auswahl (default: founding) */
  lifecycle_stage: LifecycleStage

  // Step 1: Lifecycle
  is_pre_notary: boolean

  // Step 2: Basics
  basics: CompanyBasics

  // Step 3: Gesellschafter
  gesellschafter: Gesellschafter[]

  // Step 4: Kapital
  capital: CapitalConfig

  // Step 5: Notar
  notar: NotarData

  // Step 6: SHA-Konfiguration
  sha: SHAConfig

  // Step 7: GF-Verträge (1 pro GF)
  gf_contracts: GFContract[]

  // Step 8: Auswahl der zu generierenden Dokumente
  selected_documents: string[]

  /** Output nach Submit: URL + Dateiname pro generiertem Dokument */
  generated_documents?: GeneratedDocument[]
}

export interface GeneratedDocument {
  document_type: string
  title: string
  download_url: string
  size_bytes: number
  generated_at: string
}

/** Default-State für einen frischen Wizard */
export function defaultFoundingWizardState(): FoundingWizardState {
  return {
    current_step: 1,
    lifecycle_stage: 'founding',
    is_pre_notary: true,
    basics: {
      company_name: '',
      legal_form: 'GmbH',
      company_seat: '',
      company_address: '',
      company_purpose_description: '',
      company_purpose_bullets: [],
      industry: '',
      business_year: 'Kalenderjahr',
      has_research_focus: false,
      register_court: '',
      hrb_number: '',
    },
    gesellschafter: [],
    capital: {
      stammkapital_eur: 25000,
      einlage_method: 'Geld',
      einlage_quote_initial_pct: 50,
      has_sacheinlage: false,
    },
    notar: {
      notary_name: '',
      notary_place: '',
    },
    sha: {
      has_sha: true,
      vesting_months: 48,
      cliff_months: 12,
      drag_along_threshold_pct: 75,
      tag_along_threshold_pct: 20,
      reserved_matters_majority_pct: 75,
      has_beirat: false,
      has_texas_shootout: false,
      has_ceo_designation: false,
      esop_pool_pct: 0,
    },
    gf_contracts: [],
    selected_documents: [
      'articles_of_association',
      'gesellschafterliste',
      'gf_bestellungsbeschluss',
      'hrb_anmeldung',
      'sha',
      'geschaeftsordnung_gf',
      'managing_director_employment_contract',
      'ip_assignment_agreement',
    ],
  }
}
