#!/usr/bin/env python3

import os
import sys
import fileinput
import subprocess

options = []
while len(sys.argv) > 2 and sys.argv[1] in ['-f', '-e']:
    if sys.argv[1] == '-e':
        options.extend([sys.argv[1]])
        sys.argv = sys.argv[:1] + sys.argv[2:]
    elif len(sys.argv) > 3:
        options.extend([sys.argv[1], sys.argv[2]])
        sys.argv = sys.argv[:1] + sys.argv[3:]


### Vorverarbeitung #############

strophe = []

def print_strophe():
    global strophe, file
    if not strophe:
        return
    
    # unvollständige Strophen ausfiltern
    if any('.....' in zeile for zeile in strophe):
        pass
    else:
        for i, zeile in enumerate(strophe):
            # Langzeilen aufspalten
            anvers, abvers = zeile.split('\t')
            print('', anvers, sep='\t', file=file)
            print(i//2+1, abvers, sep='\t', file=file)
        print('', file=file)
    strophe = []

tmpfile = f'kudrun-analyse-{os.getpid()}.tmp'
with open(tmpfile, 'wt', encoding='utf8') as file:
    for line in fileinput.input():
        line = line.strip()
        if line == '' or line.isnumeric():
            print_strophe()
        else:
            strophe.append(line)
    print_strophe()

    
### Versanalyse #################

command = ['./versanalyse.py', '-t', 'strophen', *options, tmpfile]

try:
    result = subprocess.run(
        command,
        stdout=subprocess.PIPE, # stdout zurückgeben
        stderr=None,     # stderr auf Bildschirm ausgeben
        text=True,       # Ausgabe als Text statt Bytes
        check=True       # Exception auslösen, falls Rückgabecode ≠ 0
    )
except subprocess.CalledProcessError as e:
    sys.exit('Fehler beim Ausführen von versanalyse.py!')

    
### Nachverarbeitung ###########
    
nummer = 0
strophe = []

def print_strophe():
    global strophe, nummer
    if not strophe:
        return

    nummer += 1
    print(nummer)
    for i in range(0, len(strophe), 2):
        zeile1, annot1, pattern1, code1 = strophe[i]
        zeile2, annot2, pattern2, code2 = strophe[i+1]
        print(zeile1+'   '+zeile2, annot1+'   '+annot2,
              pattern1+'   '+pattern2, code1+'+'+code2, sep='\t')
    strophe = []
    
for line in result.stdout.split('\n'):
    line = line.strip()
    if line:
        strophe.append(tuple(line.strip().split("\t")))
    else:
        print_strophe()
print_strophe()

os.remove(tmpfile)
