from flask_app import app
import mysql.connector
from mysql.connector import Error
from flask import Flask, send_file, jsonify, request
from configs.databaseConnection import connect_to_database, updateStatus, deleteRecord
import datetime


def serialize_row(row):
    """Convert datetime objects in a dict to ISO format strings for JSON serialization."""
    out = {}
    for key, val in row.items():
        if isinstance(val, (datetime.datetime, datetime.date)):
            out[key] = val.isoformat()
        else:
            out[key] = val
    return out


@app.route("/api/status",methods=['GET'])
def status_controller():
    connection = connect_to_database()
    if connection is None:
        return jsonify({'error': 'Failed to connect to the database'}), 500

    try:
        cursor = connection.cursor(dictionary=True)
        cursor.execute("SELECT * FROM search_requests")
        rows = cursor.fetchall()
        return jsonify([serialize_row(r) for r in rows])
    except Error as e:
        return jsonify({'error': str(e)}), 500
    finally:
        cursor.close()
        connection.close()

@app.route("/api/search_criteria", methods=['GET'])
def search_criteria_controller():
    search_id = request.args.get('search_id')

    if not search_id:
        return jsonify({'error': 'SearchId is required'}), 400

    connection = connect_to_database()
    if connection is None:
        return jsonify({'error': 'Failed to connect to the database'}), 500

    try:
        cursor = connection.cursor(dictionary=True)
        query = """
        SELECT *
        FROM search_criteria
        WHERE SearchId = %s
        """
        cursor.execute(query, (search_id,))
        rows = cursor.fetchall()
        if not rows:
            return jsonify({'error': 'No data found for the provided SearchId'}), 404

        return jsonify([serialize_row(r) for r in rows])

    except Error as e:
        return jsonify({'error': str(e)}), 500

    finally:
        if cursor:
            cursor.close()
        if connection:
            connection.close()

@app.route('/api/stopProcess', methods=['GET'])
def stopProcess():
    try:
        rowId=request.args.get('row_Id')
        print("Stopping",rowId)
        connection=connect_to_database()
        updateStatus(connection,rowId,"Stopped")
        return jsonify({'Success': 'Database Updated'}), 200
    except Exception as e:
        app.logger.error(e, stack_info=True, exc_info=True)
        return jsonify(error=str(e)), 500

@app.route('/api/deleteProcess', methods=['GET'])
def deleteProcess():
    try:
        rowId = request.args.get('row_Id')
        print("Deleting", rowId)
        connection = connect_to_database()
        deleteRecord(connection, rowId, "Deleted")
        return jsonify({'Success': 'Record deleted'}), 200
    except Exception as e:
        app.logger.error(e, stack_info=True, exc_info=True)
        return jsonify(error=str(e)), 500
