import { describe, expect, it } from 'vitest'
import type { Assessment, AssessmentResponse, QuestionWithCategories } from '@/lib/assessment-types'
import { buildFabrikanalyseCopilotMd } from '../internal/assessment-md'

function assessment(overrides: Partial<Assessment> = {}): Assessment {
  return {
    id: 'a1',
    title: 'Werksbesuch Musterwerk',
    location: 'Halle 3',
    assessment_number: 'FA-2026-001',
    supplier_name: 'Musterzulieferer GmbH',
    conducted_at: '2026-07-01',
    project_id: 'p1',
    status: 'in_progress',
    created_by: 'u1',
    created_at: '2026-07-01T08:00:00Z',
    updated_at: '2026-07-01T08:00:00Z',
    is_demo: false,
    ...overrides,
  }
}

function questions(): QuestionWithCategories[] {
  return [
    {
      id: 'q1',
      index_number: 1,
      main_category_id: 'm1',
      sub_category_id: 's1',
      question_text: 'Is the process documented?',
      question_text_de: 'Ist der Prozess dokumentiert?',
      question_text_en: null,
      answer_text_1: 'No',
      answer_text_1_de: 'Nein',
      answer_text_1_en: null,
      answer_text_2: 'Partly',
      answer_text_2_de: 'Teilweise',
      answer_text_2_en: null,
      answer_text_3: 'Yes',
      answer_text_3_de: 'Ja',
      answer_text_3_en: null,
      answer_text_4: 'Best practice',
      answer_text_4_de: 'Best Practice',
      answer_text_4_en: null,
      is_active: true,
      sort_order: 1,
      created_at: '2026-01-01T00:00:00Z',
      updated_at: '2026-01-01T00:00:00Z',
      main_category: { id: 'm1', code: 'M1', label: 'Prozessfähigkeit', label_de: 'Prozessfähigkeit', label_en: null, sort_order: 1, is_active: true },
      sub_category: { id: 's1', main_category_id: 'm1', code: 'S1', label: 'Dokumentation', label_de: 'Dokumentation', label_en: null, sort_order: 1, is_active: true },
    },
  ]
}

function responses(overrides: Partial<AssessmentResponse> = {}): AssessmentResponse[] {
  return [
    {
      id: 'r1',
      assessment_id: 'a1',
      question_id: 'q1',
      is_relevant: true,
      is_flagged: false,
      selected_rating: 2,
      comment: 'Dokumentation ist unvollständig.',
      updated_by: 'u1',
      updated_at: '2026-07-01T09:00:00Z',
      ...overrides,
    },
  ]
}

describe('buildFabrikanalyseCopilotMd', () => {
  it('produces Markdown with the AI-instruction block, glossary, and question/rating/comment content', () => {
    const md = buildFabrikanalyseCopilotMd({
      assessment: assessment(),
      questions: questions(),
      responses: responses(),
      generatedAtLabel: '19.07.2026, 10:00',
    })
    expect(typeof md).toBe('string')
    expect(md.length).toBeGreaterThan(0)

    expect(md).toContain('# Fabrikanalyse-Export')
    expect(md).toContain('## Hinweis für die KI-gestützte Weiterverarbeitung — Fabrikanalyse-Export')
    expect(md).toContain('Werksbesuch Musterwerk')
    expect(md).toContain('Musterzulieferer GmbH')
    expect(md).toContain('Ist der Prozess dokumentiert?')
    expect(md).toContain('Dokumentation ist unvollständig.')
    expect(md).toContain('Bewertung: 2 — Teilweise')
    // Glossary — same LSC/QAF/VSM/FA glossary as the DOCX export.
    expect(md).toContain('Lean Shop-floor Cycle')
    expect(md).toContain('#### Glossar')
    expect(md).toContain('| Begriff | Definition |')
    expect(md).toContain('| --- | --- |')
    // Module core numbers.
    expect(md).toContain('## Gesamtübersicht')
    expect(md).toContain('## Kategorien-Übersicht')
    expect(md).not.toContain('Demo-Hinweis')
  })

  it('renders the fictional-data disclaimer only when the assessment is_demo is true', () => {
    const withDemo = buildFabrikanalyseCopilotMd({
      assessment: assessment({ is_demo: true }),
      questions: questions(),
      responses: responses(),
      generatedAtLabel: 'x',
    })
    const withoutDemo = buildFabrikanalyseCopilotMd({
      assessment: assessment({ is_demo: false }),
      questions: questions(),
      responses: responses(),
      generatedAtLabel: 'x',
    })
    expect(withDemo).toContain('Demo-Hinweis')
    expect(withDemo).toContain('Demo-Projekt mit fiktiven Beispieldaten')
    expect(withoutDemo).not.toContain('Demo-Hinweis')
    expect(withoutDemo).not.toContain('Demo-Projekt mit fiktiven Beispieldaten')
  })

  it('renders the "keine relevanten Fragen" empty-state marker for a sub-category with no relevant questions', () => {
    const md = buildFabrikanalyseCopilotMd({
      assessment: assessment(),
      questions: questions(),
      responses: responses({ is_relevant: false }),
      generatedAtLabel: 'x',
    })
    expect(md).toContain('_Keine relevanten Fragen in dieser Unterkategorie._')
  })
})
