#!/usr/bin/env python3
from flask import Flask, request, jsonify, send_file
from flask_cors import CORS
import tempfile
import os
from processors import parse_laufzettel, fill_pdf, analyze_pdf, generate_vorbericht

app = Flask(__name__)
CORS(app)

TEMPLATES_DIR = '/opt/stacks/spa-hosting/html/schadenprotokoll/templates'


@app.route('/health', methods=['GET'])
def health():
    return jsonify({'status': 'ok'})


@app.route('/generate', methods=['POST'])
def generate():
    # Akzeptiert template (PDF) und laufzettel (DOCX)
    if 'template' not in request.files or 'laufzettel' not in request.files:
        return jsonify({'error': 'template und laufzettel erforderlich'}), 400

    template_file = request.files['template']
    laufzettel_file = request.files['laufzettel']

    if not template_file.filename.endswith('.pdf'):
        return jsonify({'error': 'Template muss PDF sein'}), 400
    if not laufzettel_file.filename.endswith('.docx'):
        return jsonify({'error': 'Laufzettel muss DOCX sein'}), 400

    with tempfile.NamedTemporaryFile(suffix='.pdf', delete=False) as tmp_tpl:
        template_file.save(tmp_tpl.name)
        with tempfile.NamedTemporaryFile(suffix='.docx', delete=False) as tmp_lz:
            laufzettel_file.save(tmp_lz.name)
            try:
                data = parse_laufzettel(tmp_lz.name)
                with tempfile.NamedTemporaryFile(suffix='.pdf', delete=False) as tmp_out:
                    fill_pdf(tmp_tpl.name, tmp_out.name, data)
                    os.unlink(tmp_tpl.name)
                    os.unlink(tmp_lz.name)
                    return send_file(tmp_out.name, mimetype='application/pdf',
                        as_attachment=True, download_name='Schadenprotokoll_vorbefuellt.pdf')
            except Exception as e:
                os.unlink(tmp_tpl.name)
                os.unlink(tmp_lz.name)
                return jsonify({'error': str(e)}), 500


@app.route('/analyze', methods=['POST'])
def analyze():
    if 'file' not in request.files:
        return jsonify({'error': 'Keine Datei'}), 400
    file = request.files['file']
    with tempfile.NamedTemporaryFile(suffix='.pdf', delete=False) as tmp:
        file.save(tmp.name)
        try:
            result = analyze_pdf(tmp.name)
            os.unlink(tmp.name)
            return jsonify({'success': True, 'data': result})
        except Exception as e:
            os.unlink(tmp.name)
            return jsonify({'error': str(e)}), 500


@app.route('/vorbericht', methods=['POST'])
def vorbericht():
    if 'file' not in request.files:
        return jsonify({'error': 'Keine Datei'}), 400
    file = request.files['file']
    template_docx = os.path.join(TEMPLATES_DIR, 'vorbericht.docx')
    with tempfile.NamedTemporaryFile(suffix='.pdf', delete=False) as tmp_in:
        file.save(tmp_in.name)
        try:
            pdf_data = analyze_pdf(tmp_in.name)
            with tempfile.NamedTemporaryFile(suffix='.docx', delete=False) as tmp_out:
                generate_vorbericht(pdf_data, template_docx, tmp_out.name)
                os.unlink(tmp_in.name)
                return send_file(tmp_out.name,
                    mimetype='application/vnd.openxmlformats-officedocument.wordprocessingml.document',
                    as_attachment=True, download_name='Vorbericht.docx')
        except Exception as e:
            os.unlink(tmp_in.name)
            return jsonify({'error': str(e)}), 500


@app.route('/templates', methods=['GET'])
def list_templates():
    templates = []
    for f in os.listdir(TEMPLATES_DIR):
        if not f.endswith('.bak'):
            path = os.path.join(TEMPLATES_DIR, f)
            templates.append({'name': f, 'size': os.path.getsize(path)})
    return jsonify({'templates': templates})


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5050, debug=False)
