const { execSync } = require('child_process');

describe('conllu-gender', () => {

  test('Full mode: all gender-sensitive nouns (Genderstern singular)', () => {
    const command = 'node src/index.js < test/data/gender.conllu';
    const stdout = execSync(command).toString();

    // Genderstern singular noun: Bürger*in → lemma Bürger*in, NOUN NN Gender=NonBin|Number=Sing
    expect(stdout).toContain('Bürger*in\tBürger*in\tNOUN\tNN\tGender=NonBin|Number=Sing');
    // Long compound: Jugendpsychiater*in
    expect(stdout).toContain('Jugendpsychiater*in\tJugendpsychiater*in\tNOUN\tNN\tGender=NonBin|Number=Sing');
    // Compound with umlaut base: Generalstaatsanwält*in
    expect(stdout).toContain('Generalstaatsanwält*in\tGeneralstaatsanwält*in\tNOUN\tNN\tGender=NonBin|Number=Sing');
    // Nachfolger*in
    expect(stdout).toContain('Nachfolger*in\tNachfolger*in\tNOUN\tNN\tGender=NonBin|Number=Sing');
    // With umlaut base: Antragssteller*in (no umlaut but long compound)
    expect(stdout).toContain('Antragssteller*in\tAntragssteller*in\tNOUN\tNN\tGender=NonBin|Number=Sing');
  });

  test('Full mode: Genderstern plural nouns → lemma uses singular, Number=Plur', () => {
    const command = 'node src/index.js < test/data/gender.conllu';
    const stdout = execSync(command).toString();
    // Fachärzt*innen → lemma Fachärzt*in
    expect(stdout).toContain('Fachärzt*innen\tFachärzt*in\tNOUN\tNN\tGender=NonBin|Number=Plur');
  });

  test('Full mode: Doppelpunkt nouns', () => {
    const command = 'node src/index.js < test/data/gender.conllu';
    const stdout = execSync(command).toString();
    // Doppelpunkt singular
    expect(stdout).toContain('Anhänger:in\tAnhänger:in\tNOUN\tNN\tGender=NonBin|Number=Sing');
    expect(stdout).toContain('Wirt:in\tWirt:in\tNOUN\tNN\tGender=NonBin|Number=Sing');
    // Doppelpunkt plural  
    expect(stdout).toContain('Lehrer:innen\tLehrer:in\tNOUN\tNN\tGender=NonBin|Number=Plur');
    // Long compound with umlaut base
    expect(stdout).toContain('Menschenrechtsanwält:innen\tMenschenrechtsanwält:in\tNOUN\tNN\tGender=NonBin|Number=Plur');
  });

  test('Full mode: Unterstrich plural nouns', () => {
    const command = 'node src/index.js < test/data/gender.conllu';
    const stdout = execSync(command).toString();
    expect(stdout).toContain('Autor_innen\tAutor_in\tNOUN\tNN\tGender=NonBin|Number=Plur');
  });

  test('Full mode: Binnen-I nouns (binary intended → Gender=Masc,Fem)', () => {
    const command = 'node src/index.js < test/data/gender.conllu';
    const stdout = execSync(command).toString();
    // Binnen-I singular: ZeugIn → Gender=Masc,Fem|Number=Sing
    expect(stdout).toContain('ZeugIn\tZeugIn\tNOUN\tNN\tGender=Masc,Fem|Number=Sing');
    // Binnen-I singular: SchülerIn → Gender=Masc,Fem|Number=Sing
    expect(stdout).toContain('SchülerIn\tSchülerIn\tNOUN\tNN\tGender=Masc,Fem|Number=Sing');
    // Binnen-I plural: LehrerInnen → lemma LehrerIn, Number=Plur
    expect(stdout).toContain('LehrerInnen\tLehrerIn\tNOUN\tNN\tGender=Masc,Fem|Number=Plur');
  });

  test('Full mode: Klammern plural nouns (binary intended)', () => {
    const command = 'node src/index.js < test/data/gender.conllu';
    const stdout = execSync(command).toString();
    expect(stdout).toContain('Schüler(innen)\tSchüler(in)\tNOUN\tNN\tGender=Masc,Fem|Number=Plur');
  });

  test('Full mode: Schrägstrich nouns', () => {
    const command = 'node src/index.js < test/data/gender.conllu';
    const stdout = execSync(command).toString();
    // Simple slash
    expect(stdout).toContain('Autor/innen\tAutor/in\tNOUN\tNN\tGender=Masc,Fem|Number=Plur');
    // Slash with Ergänzungsstrich (/-innen)
    expect(stdout).toContain('Autor/-innen\tAutor/in\tNOUN\tNN\tGender=Masc,Fem|Number=Plur');
    expect(stdout).toContain('Spieler/-innen\tSpieler/in\tNOUN\tNN\tGender=Masc,Fem|Number=Plur');
  });

  test('Full mode: gendered determiners/pronouns (non-binary intended)', () => {
    const command = 'node src/index.js < test/data/gender.conllu';
    const stdout = execSync(command).toString();
    // jede*r → DET PIAT Gender=NonBin, lemma jede*r
    expect(stdout).toContain('jede*r\tjede*r\tDET\tPIAT\tGender=NonBin');
    const jeder_count = (stdout.match(/jede\*r\tjede\*r/g) || []).length;
    expect(jeder_count).toBe(2);  // appears in two sentences
    // eine*n → DET ART Gender=NonBin  (non-binary via *)
    expect(stdout).toContain('eine*n\teine*n\tDET\tART\tGender=NonBin');
    // jede:r → DET PIAT Gender=NonBin
    expect(stdout).toContain('jede:r\tjede:r\tDET\tPIAT\tGender=NonBin');
    // die*der → DET ART Gender=NonBin  (* marker → NonBin even for merged forms)
    expect(stdout).toContain('die*der\tdie*der\tDET\tART\tGender=NonBin');
  });

  test('Full mode: neo-pronoun (sie*er → PRON PPER Gender=NonBin)', () => {
    const command = 'node src/index.js < test/data/gender.conllu';
    const stdout = execSync(command).toString();
    expect(stdout).toContain('sie*er\tsie*er\tPRON\tPPER\tGender=NonBin');
  });

  test('Full mode: neo-pronoun lexicon forms (PRON PPER Gender=NonBin|PronType=Prs)', () => {
    const command = 'node src/index.js < test/data/gender.conllu';
    const stdout = execSync(command).toString();
    // sier: NOM of sier-paradigm
    expect(stdout).toContain('sier\tsier\tPRON\tPPER\tGender=NonBin|PronType=Prs');
    // xier: NOM of xier-paradigm
    expect(stdout).toContain('xier\txier\tPRON\tPPER\tGender=NonBin|PronType=Prs');
    // oj: NOM of oj-paradigm
    expect(stdout).toContain('oj\toj\tPRON\tPPER\tGender=NonBin|PronType=Prs');
    // el: NOM of el-paradigm
    expect(stdout).toContain('el\tel\tPRON\tPPER\tGender=NonBin|PronType=Prs');
    // hen: NOM of hen-paradigm
    expect(stdout).toContain('hen\then\tPRON\tPPER\tGender=NonBin|PronType=Prs');
  });

  test('Full mode: foundry comment changed to gender', () => {
    const command = 'node src/index.js < test/data/gender.conllu';
    const stdout = execSync(command).toString();
    const foundry_count = (stdout.match(/# foundry = gender/g) || []).length;
    expect(foundry_count).toBe(12);
  });

  test('Full mode: non-gender tokens pass through unchanged', () => {
    const command = 'node src/index.js < test/data/gender.conllu';
    const stdout = execSync(command).toString();
    // Regular nouns are passed through, lemma stays _
    expect(stdout).toContain('Umbenennung\t_\tNOUN\tNN');
    expect(stdout).toContain('Ideen\t_\tNOUN\tNN');
  });

  test('Sparse mode: only annotated tokens are emitted', () => {
    const command = 'node src/index.js -s < test/data/gender.conllu';
    const stdout = execSync(command).toString();
    const lines = stdout.split('\n');
    const tokenLines = lines.filter(l => l.match(/^\d+\t/));
    // Every token line must carry a gender annotation:
    // either the lemma column (col 2) is non-underscore (noun/pron was annotated)
    // or the features column (col 5) is non-underscore (det was annotated)
    tokenLines.forEach(line => {
      const cols = line.split('\t');
      const lemmaAnnotated  = cols[2] !== '_';
      const featsAnnotated  = cols[5] !== '_';
      expect(lemmaAnnotated || featsAnnotated).toBe(true);
    });
    // Count: 18 NOUN + 5 DET + 1 PRON (sie*er) + 5 neo-pronouns (sier,xier,oj,el,hen) = 29
    expect(tokenLines.length).toBe(29);
  });

  test('Sparse mode: sentence headers are emitted for sentences with matches', () => {
    const command = 'node src/index.js -s < test/data/gender.conllu';
    const stdout = execSync(command).toString();
    // All 12 test sentences have at least one gender form
    const text_id_count = (stdout.match(/# text_id = /g) || []).length;
    expect(text_id_count).toBe(12);
  });

  test('Inline input: basic Genderstern annotation', () => {
    const testInput = `# foundry = base
# text_id = inline-001
# text = Die Lehrerin und Lehrer*innen kamen
1\tDie\t_\tDET\tART\t_\t_\t_\t_\t_
2\tLehrerin\t_\tNOUN\tNN\t_\t_\t_\t_\t_
3\tund\t_\tCCONJ\tKON\t_\t_\t_\t_\t_
4\tLehrer*innen\t_\t_\t_\t_\t_\t_\t_\t_
5\tkamen\t_\tVERB\tVVFIN\t_\t_\t_\t_\t_

`;
    const stdout = execSync('node src/index.js', { input: testInput }).toString();
    expect(stdout).toContain('Lehrer*innen\tLehrer*in\tNOUN\tNN\tGender=NonBin|Number=Plur');
    // Regular noun 'Lehrerin' must not be incorrectly tagged
    expect(stdout).toContain('Lehrerin\t_\tNOUN\tNN\t_');
  });

  test('Inline input: existing POS/lemma/feats are replaced for gender forms', () => {
    const testInput = `# foundry = base
# text_id = inline-002
# text = jede Ärztin und jede*r Arzt*in
1\tjede\t_\tDET\tPIAT\tGender=Fem|Number=Sing\t_\t_\t_\t_
2\tÄrztin\tÄrztin\tNOUN\tNN\tGender=Fem|Number=Sing\t_\t_\t_\t_
3\tund\t_\tCCONJ\tKON\t_\t_\t_\t_\t_
4\tjede*r\t_\tDET\tPIAT\t_\t_\t_\t_\t_
5\tArzt*in\t_\t_\t_\t_\t_\t_\t_\t_

`;
    const stdout = execSync('node src/index.js', { input: testInput }).toString();
    // jede*r: missing feats should be filled in
    expect(stdout).toContain('jede*r\tjede*r\tDET\tPIAT\tGender=NonBin');
    // Arzt*in: umlaut base, missing everything
    expect(stdout).toContain('Arzt*in\tArzt*in\tNOUN\tNN\tGender=NonBin|Number=Sing');
    // Ärztin (regular moviertes Femininum, no gender marker): unchanged
    expect(stdout).toContain('Ärztin\tÄrztin\tNOUN\tNN\tGender=Fem|Number=Sing');
    // jede (without gender marker): unchanged
    expect(stdout).toContain('jede\t_\tDET\tPIAT\tGender=Fem|Number=Sing');
  });
});
