# import sqlite3
# import json
# import os
# import webbrowser
# from http.server import SimpleHTTPRequestHandler, HTTPServer

# # Force Mac directory alignment
# SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
# os.chdir(SCRIPT_DIR)

# # 1. Initialize Local SQLite Database
# conn = sqlite3.connect('baseball_manager.db', check_same_thread=False)
# cursor = conn.cursor()
# cursor.execute('''
#     CREATE TABLE IF NOT EXISTS players (
#         id INTEGER PRIMARY KEY AUTOINCREMENT,
#         name TEXT NOT NULL,
#         positionAssignment TEXT NOT NULL DEFAULT ''
#     )
# ''')
# conn.commit()

# # 2. Local Server API Request Handler
# class BaseballRequestHandler(SimpleHTTPRequestHandler):
#     def log_message(self, format, *args):
#         return # Prevents terminal output window clutter

#     def do_GET(self):
#         if self.path == '/api/load':
#             self.send_response(200)
#             self.send_header('Content-Type', 'application/json')
#             self.end_headers()
#             cursor.execute("SELECT id, name, positionAssignment FROM players")
#             # Unpack rows into valid structural list items explicitly
#             roster = [{"id": int(r[0]), "name": str(r[1]), "positionAssignment": str(r[2])} for r in cursor.fetchall()]
#             self.wfile.write(json.dumps(roster).encode('utf-8'))
#         else:
#             if self.path == '/' or self.path == '/index.html':
#                 self.path = '/lineup.html'
#             return super().do_GET()

#     def do_POST(self):
#         content_length = int(self.headers['Content-Length'])
#         payload = json.loads(self.rfile.read(content_length).decode('utf-8'))
#         data = payload.get('data', {})
        
#         if self.path == '/api/save':
#             if data.get('id'):
#                 cursor.execute("UPDATE players SET name=? WHERE id=?", (data['name'], data['id']))
#             else:
#                 cursor.execute("INSERT INTO players (name, positionAssignment) VALUES (?, '')", (data['name'],))
#             conn.commit()
#         elif self.path == '/api/delete':
#             cursor.execute("DELETE FROM players WHERE id=?", (data['id'],))
#             conn.commit()
#         elif self.path == '/api/assignPosition':
#             cursor.execute("UPDATE players SET positionAssignment=? WHERE id=?", (data['position'], data['id']))
#             conn.commit()

#         # Instantly stream fresh records back to browser DOM
#         self.send_response(200)
#         self.send_header('Content-Type', 'application/json')
#         self.end_headers()
#         cursor.execute("SELECT id, name, positionAssignment FROM players")
#         roster = [{"id": int(r[0]), "name": str(r[1]), "positionAssignment": str(r[2])} for r in cursor.fetchall()]
#         self.wfile.write(json.dumps(roster).encode('utf-8'))

# # 3. Dynamic Server Core Auto-launcher
# PORT = 8000
# try:
#     # Use empty string '' to bind to all local interfaces safely
#     server = HTTPServer(('', PORT), BaseballRequestHandler)
#     print(f"🚀 SUCCESS: Mac backend live at http://127.0.0.1:{PORT}/")
    
#     # Fires up your Mac browser automatically
#     webbrowser.open(f'http://127.0.0.1:{PORT}/')
#     server.serve_forever()
# except Exception as e:
#     print(f"❌ SERVER STARTUP FAILED: {e}")


import sqlite3
import os
from flask import Flask, render_template, jsonify, request

# Force local directory alignment
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
os.chdir(SCRIPT_DIR)

app = Flask(__name__)
application = app  # CRITICAL: Required by InMotion Hosting's backend


# Change your database connection block to this:
BASE_DIR = '/home/racing27/fivetool'
db_path = os.path.join(BASE_DIR, 'baseball_manager.db')

conn = sqlite3.connect(db_path, check_same_thread=False)


# Initialize Local SQLite Database
# conn = sqlite3.connect('baseball_manager.db', check_same_thread=False)
cursor = conn.cursor()
cursor.execute('''
    CREATE TABLE IF NOT EXISTS players (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        positionAssignment TEXT NOT NULL DEFAULT ''
    )
''')
conn.commit()

def get_roster():
    """Helper to fetch and format the current roster."""
    cursor.execute("SELECT id, name, positionAssignment FROM players")
    return [{"id": int(r[0]), "name": str(r[1]), "positionAssignment": str(r[2])} for r in cursor.fetchall()]

# --- ROUTING HANDLERS ---

# @app.route('/')
# @app.route('/index.html')
# @app.route('/lineup.html')
# def serve_home():
#     # Flask looks inside the /templates folder automatically
#     return render_template('lineup.html')

# @app.route('/api/load', methods=['GET'])
# def api_load():
#     return jsonify(get_roster())

# @app.route('/api/save', methods=['POST'])
# def api_save():
#     payload = request.get_json(silent=True) or {}
#     data = payload.get('data', {})
    
#     if data.get('id'):
#         cursor.execute("UPDATE players SET name=? WHERE id=?", (data['name'], data['id']))
#     else:
#         cursor.execute("INSERT INTO players (name, positionAssignment) VALUES (?, '')", (data['name'],))
#     conn.commit()
#     return jsonify(get_roster())

# @app.route('/api/delete', methods=['POST'])
# def api_delete():
#     payload = request.get_json(silent=True) or {}
#     data = payload.get('data', {})
    
#     cursor.execute("DELETE FROM players WHERE id=?", (data['id'],))
#     conn.commit()
#     return jsonify(get_roster())

# @app.route('/api/assignPosition', methods=['POST'])
# def api_assign_position():
#     payload = request.get_json(silent=True) or {}
#     data = payload.get('data', {})
    
#     cursor.execute("UPDATE players SET positionAssignment=? WHERE id=?", (data['position'], data['id']))
#     conn.commit()
#     return jsonify(get_roster())


# --- ROUTING HANDLERS ---

# @app.route('/')
# @app.route('/fivetool')
# @app.route('/fivetool/index.html')
# @app.route('/fivetool/lineup.html')
# def serve_home():
#     return render_template('lineup.html')

# @app.route('/fivetool/api/load', methods=['GET'])
# def api_load():
#     return jsonify(get_roster())

# @app.route('/fivetool/api/save', methods=['POST'])
# def api_save():
#     payload = request.get_json(silent=True) or {}
#     data = payload.get('data', {})
    
#     if data.get('id'):
#         cursor.execute("UPDATE players SET name=? WHERE id=?", (data['name'], data['id']))
#     else:
#         cursor.execute("INSERT INTO players (name, positionAssignment) VALUES (?, '')", (data['name'],))
#     conn.commit()
#     return jsonify(get_roster())

# @app.route('/fivetool/api/delete', methods=['POST'])
# def api_delete():
#     payload = request.get_json(silent=True) or {}
#     data = payload.get('data', {})
    
#     cursor.execute("DELETE FROM players WHERE id=?", (data['id'],))
#     conn.commit()
#     return jsonify(get_roster())

# @app.route('/fivetool/api/assignPosition', methods=['POST'])
# def api_assign_position():
#     payload = request.get_json(silent=True) or {}
#     data = payload.get('data', {})
    
#     cursor.execute("UPDATE players SET positionAssignment=? WHERE id=?", (data['position'], data['id']))
#     conn.commit()
#     return jsonify(get_roster())

# --- ROUTING HANDLERS ---

# Serves your HTML file whether accessed via folder or root domain
# @app.route('/')
# @app.route('/fivetool')
# @app.route('/fivetool/index.html')
# @app.route('/fivetool/lineup.html')
# def serve_home():
#     return render_template('lineup.html')

# # Catch both variations for LOAD
# @app.route('/api/load', methods=['GET'])
# @app.route('/fivetool/api/load', methods=['GET'])
# def api_load():
#     return jsonify(get_roster())

# # Catch both variations for SAVE
# @app.route('/api/save', methods=['POST'])
# @app.route('/fivetool/api/save', methods=['POST'])
# def api_save():
#     payload = request.get_json(silent=True) or {}
#     data = payload.get('data', {})
    
#     if data.get('id'):
#         cursor.execute("UPDATE players SET name=? WHERE id=?", (data['name'], data['id']))
#     else:
#         cursor.execute("INSERT INTO players (name, positionAssignment) VALUES (?, '')", (data['name'],))
#     conn.commit()
#     return jsonify(get_roster())

# --- ROUTING HANDLERS ---

@app.route('/')
@app.route('/index.html')
@app.route('/lineup.html')
def serve_home():
    return render_template('lineup.html')

@app.route('/api/load', methods=['GET'])
def api_load():
    return jsonify(get_roster())

@app.route('/api/save', methods=['POST'])
def api_save():
    payload = request.get_json(silent=True) or {}
    data = payload.get('data', {})
    
    if data.get('id'):
        cursor.execute("UPDATE players SET name=? WHERE id=?", (data['name'], data['id']))
    else:
        cursor.execute("INSERT INTO players (name, positionAssignment) VALUES (?, '')", (data['name'],))
    conn.commit()
    return jsonify(get_roster())

@app.route('/api/delete', methods=['POST'])
def api_delete():
    payload = request.get_json(silent=True) or {}
    data = payload.get('data', {})
    
    cursor.execute("DELETE FROM players WHERE id=?", (data['id'],))
    conn.commit()
    return jsonify(get_roster())

@app.route('/api/assignPosition', methods=['POST'])
def api_assign_position():
    payload = request.get_json(silent=True) or {}
    data = payload.get('data', {})
    
    cursor.execute("UPDATE players SET positionAssignment=? WHERE id=?", (data['position'], data['id']))
    conn.commit()
    return jsonify(get_roster())



# Catch both variations for DELETE
@app.route('/api/delete', methods=['POST'])
@app.route('/fivetool/api/delete', methods=['POST'])
def api_delete():
    payload = request.get_json(silent=True) or {}
    data = payload.get('data', {})
    
    cursor.execute("DELETE FROM players WHERE id=?", (data['id'],))
    conn.commit()
    return jsonify(get_roster())

# Catch both variations for ASSIGN POSITION
@app.route('/api/assignPosition', methods=['POST'])
@app.route('/fivetool/api/assignPosition', methods=['POST'])
def api_assign_position():
    payload = request.get_json(silent=True) or {}
    data = payload.get('data', {})
    
    cursor.execute("UPDATE players SET positionAssignment=? WHERE id=?", (data['position'], data['id']))
    conn.commit()
    return jsonify(get_roster())


# For local computer testing only (InMotion ignores this block completely)
if __name__ == '__main__':
    app.run(port=8000, debug=True)
