from pathlib import Path

from flask import Blueprint, current_app, jsonify, render_template, request

from app.services.whatsapp_service import WhatsAppService

main_bp = Blueprint("main", __name__)
service = WhatsAppService()


@main_bp.route("/")
def index():
    contacts = current_app.config.get("CURRENT_CONTACTS", [])
    return render_template("index.html", contacts=contacts)


@main_bp.route("/health")
def health():
    return {"status": "ok"}


@main_bp.route("/api/upload", methods=["POST"])
def upload_file():
    file = request.files.get("excel_file")
    if not file or file.filename == "":
        return jsonify({"error": "Selecciona un archivo Excel"}), 400

    uploads_dir = Path(current_app.config["UPLOAD_FOLDER"])
    uploads_dir.mkdir(parents=True, exist_ok=True)
    file_path = uploads_dir / file.filename
    file.save(file_path)

    contacts = WhatsAppService.read_contacts(file_path)
    current_app.config["CURRENT_CONTACTS"] = contacts
    current_app.config["LAST_FILE_NAME"] = file.filename

    return jsonify(
        {
            "count": len(contacts),
            "filename": file.filename,
            "contacts": contacts[:10],
        }
    )


@main_bp.route("/api/connect", methods=["POST"])
def connect_whatsapp():
    status = service.connect()
    return jsonify({"status": status})


@main_bp.route("/api/validate", methods=["POST"])
def validate_whatsapp():
    status = service.validate()
    return jsonify({"status": status, "service": "Valida si la sesión de WhatsApp Web está activa."})


@main_bp.route("/api/start-campaign", methods=["POST"])
def start_campaign():
    payload = request.get_json(silent=True) or {}
    message = payload.get("message") or "Hola {Nombre}"
    contacts = payload.get("contacts") or current_app.config.get("CURRENT_CONTACTS", [])

    result = service.send_campaign(message, contacts)
    return jsonify(result)
