from flask import Flask, render_template, request, send_file
from utils.pdf_generator import generate_pdf
import os
from datetime import datetime

app = Flask(__name__)

BASE_DIR = os.path.dirname(os.path.abspath(__file__))


@app.route('/')
def index():
    return render_template('form.html')


@app.route('/generate', methods=['POST'])
def generate():
    form_data = request.form.to_dict()

    # Peta template dengan nama file PDF yang benar (case-sensitive)
    template_map = {
        'ALADIN': os.path.join(BASE_DIR, 'pdf_templates', 'ALADIN_BLANK.pdf'),
        'ALLO': os.path.join(BASE_DIR, 'pdf_templates', 'ALLO_BLANK.pdf'),
        'BBCA': os.path.join(BASE_DIR, 'pdf_templates', 'BBCA_BLANK.pdf'),
        'BANKSAQU': os.path.join(BASE_DIR, 'pdf_templates', 'BANKSAQU_BLANK.pdf'),
        'BBNI': os.path.join(BASE_DIR, 'pdf_templates', 'BBNI_BLANK.pdf'),
        'BBNI_NEW': os.path.join(BASE_DIR, 'pdf_templates', 'BBNI_NEW_BLANK.pdf'),
        'BBRI': os.path.join(BASE_DIR, 'pdf_templates', 'BBRI_BLANK.pdf'),
        'BBSI': os.path.join(BASE_DIR, 'pdf_templates', 'BBSI_BLANK.pdf'),
        'BBSI_NEW': os.path.join(BASE_DIR, 'pdf_templates', 'BBSI_NEW_BLANK.pdf'),
        'BLU': os.path.join(BASE_DIR, 'pdf_templates', 'BLU_BLANK.pdf'),
        'DANAMON': os.path.join(BASE_DIR, 'pdf_templates', 'DANAMON_BLANK.pdf'),
        'DIGI': os.path.join(BASE_DIR, 'pdf_templates', 'DIGI_BLANK.pdf'),
        'HANA': os.path.join(BASE_DIR, 'pdf_templates', 'HANA_BLANK.pdf'),
        'INDIHOME': os.path.join(BASE_DIR, 'pdf_templates', 'INDIHOME_BLANK.pdf'),
        'JAGO': os.path.join(BASE_DIR, 'pdf_templates', 'JAGO_BLANK.pdf'),
        'JAKOM': os.path.join(BASE_DIR, 'pdf_templates', 'JAKOM_BLANK.pdf'),
        'JENIUS': os.path.join(BASE_DIR, 'pdf_templates', 'JENIUS_BLANK.pdf'),
        'KROM': os.path.join(BASE_DIR, 'pdf_templates', 'KROM_BLANK.pdf'),
        'LIVIN': os.path.join(BASE_DIR, 'pdf_templates', 'LIVIN_BLANK.pdf'),
        'MANDIRI_V1': os.path.join(BASE_DIR, 'pdf_templates', 'MANDIRI_V1_BLANK.pdf'),
        'MANDIRI_V2': os.path.join(BASE_DIR, 'pdf_templates', 'MANDIRI_V2_BLANK.pdf'),
        'MANDIRI_V3': os.path.join(BASE_DIR, 'pdf_templates', 'MANDIRI_V3_BLANK.pdf'),
        'OCBC': os.path.join(BASE_DIR, 'pdf_templates', 'OCBC_BLANK.pdf'),
        'OCTO': os.path.join(BASE_DIR, 'pdf_templates', 'OCTO_BLANK.pdf'),
        'PERMATA_V1': os.path.join(BASE_DIR, 'pdf_templates', 'PERMATA_V1_BLANK.pdf'),
        'PERMATA_V2': os.path.join(BASE_DIR, 'pdf_templates', 'PERMATA_V2_BLANK.pdf'),
        'RAYA': os.path.join(BASE_DIR, 'pdf_templates', 'RAYA_BLANK.pdf'),
        'REPUBLIC': os.path.join(BASE_DIR, 'pdf_templates', 'REPUBLIC_BLANK.pdf'),
        'SEABANK': os.path.join(BASE_DIR, 'pdf_templates', 'SEABANK_BLANK.pdf'),
        'SUPER': os.path.join(BASE_DIR, 'pdf_templates', 'SUPER_BLANK.pdf'),
        'TMRW': os.path.join(BASE_DIR, 'pdf_templates', 'TMRW_BLANK.pdf'),
    }

    # Normalisasi nama template dari form agar uppercase
    # selected_template = form_data.get("template", "BBCA").upper()
    selected_templates = request.form.getlist("templates") or [request.form.get("template")]

    pdf_paths = []
    now = datetime.now()
    waktu_str = now.strftime("%d%m%Y_%H%M")

    for template_name in selected_templates:
        template_name_upper = template_name.upper()
        if template_name_upper not in template_map:
            continue

        output_filename = f"billing_{template_name.lower()}_{waktu_str}.pdf"
        output_path = os.path.join(BASE_DIR, 'static', output_filename)

        data_copy = form_data.copy()
        data_copy["template"] = template_name_upper
        generate_pdf(data_copy, template_map[template_name_upper], output_path)
        pdf_paths.append((output_path, output_filename))

    # Cek apakah template tersedia
    # if selected_template not in template_map:
    #     return f"Template '{selected_template}' tidak dikenali.", 400

    # now = datetime.now()
    # waktu_str = now.strftime("%d%m%Y_%H%M")
    # output_filename = f"billing_{selected_template.lower()}_{waktu_str}.pdf"
    # output_path = os.path.join(BASE_DIR, 'static', output_filename)

    # generate_pdf(form_data, template_map[selected_template], output_path)
    # Generate custom filename

    # return send_file(output_path, as_attachment=True, download_name=output_filename)
    if len(pdf_paths) == 1:
        return send_file(pdf_paths[0][0], as_attachment=True, download_name=pdf_paths[0][1])
    else:
        import zipfile
        zip_filename = f"billing_batch_{waktu_str}.zip"
        zip_path = os.path.join(BASE_DIR, "static", zip_filename)
        with zipfile.ZipFile(zip_path, "w") as zipf:
            for path, fname in pdf_paths:
                zipf.write(path, arcname=fname)
        return send_file(zip_path, as_attachment=True, download_name=zip_filename)



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