from flask import Blueprint, render_template, request, redirect, url_for, flash
from app import db
from app.models import (
    PracticeArea, Partner, AboutValue, TeamMember, Publication, ContactMessage
)

main_bp = Blueprint("main", __name__)


@main_bp.route("/")
def home():
    practice_areas = PracticeArea.query.order_by(PracticeArea.order).all()
    partners = Partner.query.order_by(Partner.order).all()
    return render_template("index.html", practice_areas=practice_areas, partners=partners)


@main_bp.route("/about")
def about():
    values = AboutValue.query.order_by(AboutValue.order).all()
    return render_template("about.html", values=values)


@main_bp.route("/team")
def team():
    members = TeamMember.query.order_by(TeamMember.order).all()
    return render_template("team.html", members=members)


@main_bp.route("/publications")
@main_bp.route("/blog")
def publications():
    query = request.args.get("q", "").strip()

    items_query = Publication.query.filter_by(is_published=True)
    if query:
        like = f"%{query}%"
        items_query = items_query.filter(
            db.or_(Publication.topic.ilike(like), Publication.description.ilike(like))
        )

    items = items_query.order_by(Publication.created_at.desc()).all()
    return render_template("publications.html", publications=items, search_query=query)


@main_bp.route("/publication/<int:id>")
@main_bp.route("/blog/<int:id>")
def publication_detail(id):
    pub = Publication.query.get_or_404(id)
    if not pub.is_published:
        flash("This publication is not available.", "warning")
        return redirect(url_for("main.publications"))
    return render_template("publication_detail.html", pub=pub)



@main_bp.route("/connect", methods=["GET", "POST"])
def connect():
    if request.method == "POST":
        name = request.form.get("name", "").strip()
        email = request.form.get("email", "").strip()
        phone = request.form.get("phone", "").strip()
        subject = request.form.get("subject", "").strip()
        message = request.form.get("message", "").strip()

        if not name or not email or not message:
            flash("Please fill in your name, email and message.", "danger")
            return redirect(url_for("main.connect"))

        db.session.add(ContactMessage(
            name=name, email=email, phone=phone, subject=subject, message=message
        ))
        db.session.commit()
        flash("Thank you for reaching out. We will get back to you shortly.", "success")
        return redirect(url_for("main.connect"))

    return render_template("connect.html")


@main_bp.route("/contact-home", methods=["POST"])
def contact_home():
    """Handles the shorter contact form embedded on the home page."""
    name = request.form.get("name", "").strip()
    email = request.form.get("email", "").strip()
    phone = request.form.get("phone", "").strip()
    subject = request.form.get("subject", "").strip()
    message = request.form.get("message", "").strip()

    if not name or not email or not message:
        flash("Please fill in your name, email and message.", "danger")
        return redirect(url_for("main.home") + "#contact")

    db.session.add(ContactMessage(
        name=name, email=email, phone=phone, subject=subject, message=message
    ))
    db.session.commit()
    flash("Thank you for reaching out. We will get back to you shortly.", "success")
    return redirect(url_for("main.home") + "#contact")
