from flask import render_template, request, g, abort, redirect, url_for
from .config import db
from .utils import get_cities
import pymysql
import datetime


def search():
    if not g.user:
        return redirect(url_for("login"))
    departure_city = request.args.get('departure')
    destination_city = request.args.get('destination')
    departure_date = request.args.get('departure-date')
    passengers = int(request.args.get('passengers', 1))

    # Date validation
    try:
        departure_date_obj = datetime.datetime.strptime(departure_date, '%Y-%m-%d').date()
        if departure_date_obj < datetime.date.today():
            abort(400, description="Departure date cannot be in the past.")
    except ValueError:
        abort(400, description="Invalid date format.")

    conn = pymysql.connect(**db)
    cursor = conn.cursor(pymysql.cursors.DictCursor)
    
    search_sql = """
    SELECT f.*, d.Name as Departure_airport_name, a.Name as Arrival_airport_name
    FROM Flights f
    JOIN Airports d ON f.Departure_airport = d.ID
    JOIN Airports a ON f.Arrival_airport = a.ID
    WHERE d.City = %s AND a.City = %s 
    AND DATE(f.Departure_time) = %s 
    AND (f.First_class_seats_remaining + f.Business_class_seats_remaining + f.Economy_class_seats_remaining) >= %s
    AND f.Status NOT IN ('已起飞', '已降落');
    """
    
    cursor.execute(search_sql, (departure_city, destination_city, departure_date, passengers))
    flights = cursor.fetchall()
    
    cursor.close()
    conn.close()
    
    return render_template(
        'search.html', 
        cities=get_cities(), 
        flights=flights, 
        username=g.name
    )