from flask import Blueprint, render_template, request, redirect, url_for, flash, jsonify
from flask_login import login_required, current_user
from app.extensions import db, csrf
from app.ai.diamond import run_sync
from app.models.campaign import Website
from app.models.report import Report

websites_bp = Blueprint("websites", __name__, url_prefix="/websites")


@websites_bp.route("/")
@login_required
def index():
    websites = Website.query.filter_by(user_id=current_user.id).order_by(Website.created_at.desc()).all()
    return render_template("websites/index.html", websites=websites)


@websites_bp.route("/create/<int:report_id>", methods=["POST"])
@login_required
def create(report_id):
    report = Report.query.get_or_404(report_id)
    if report.user_id != current_user.id:
        return redirect(url_for("websites.index"))

    existing = Website.query.filter_by(report_id=report.id).first()
    if existing:
        flash("Website already created for this report.", "info")
        return redirect(url_for("websites.index"))

    import re
    subdomain = re.sub(r'[^a-z0-9]', '-', report.project_name.lower())[:30]

    website = Website(
        user_id=current_user.id,
        report_id=report.id,
        subdomain=subdomain,
        status="creating",
    )
    db.session.add(website)
    db.session.commit()

    from app.website import MultiSaasClient
    client = MultiSaasClient()
    try:
        result = run_sync(
            client.create_tenant(report.project_name, current_user.email, subdomain)
        )
        website.tenant_id = result.get("id", result.get("tenant_id", ""))
        website.status = "active" if website.tenant_id else "error"
    except Exception:
        website.status = "error"
    db.session.commit()
    flash("Website creation initiated!", "success")
    return redirect(url_for("websites.index"))


@websites_bp.route("/domain/<int:website_id>", methods=["POST"])
@login_required
def set_domain(website_id):
    website = Website.query.get_or_404(website_id)
    if website.user_id != current_user.id:
        return redirect(url_for("websites.index"))
    domain = request.form.get("domain", "").strip()
    if not domain:
        flash("Domain required.", "error")
        return redirect(url_for("websites.index"))

    website.custom_domain = domain
    from app.website import MultiSaasClient
    client = MultiSaasClient()
    try:
        run_sync(client.set_custom_domain(website.tenant_id, domain))
    except Exception:
        pass
    db.session.commit()
    flash(f"Domain {domain} set!", "success")
    return redirect(url_for("websites.index"))
