from fastmcp import FastMCP
from matrix_shop_bot.db import Data
import os
import uvicorn

# CORS
from starlette.middleware import Middleware
from starlette.middleware.cors import CORSMiddleware

# HTTP
from starlette.applications import Starlette
from starlette.routing import Mount


MY_IP=os.environ.get('MY_IP')
mcp = FastMCP("Shopping List")

@mcp.tool
def add_item(name: str) -> str:
    return str(Data().add_item(name))

@mcp.tool
def buy(items:str) -> str:
    return '\n'.join(Data().purchase_items(items))

@mcp.tool
def list_bought(store:str) -> str:
    return '\n'.join(Data().list_purchases(store))

#@mcp.tool
#def clear(store_name: str, clear_all:bool=False) -> 'list[str]':
#    return Data().clear_list(store_name, clear_all)


@mcp.tool
def shop_at(store_name:str) -> str:
    '''Select store to shop at'''
    return '\n'.join(Data().get_shopping_list(store_name))


@mcp.tool
def list() -> str:
    '''Use previous store'''
    return '\n'.join(Data().get_last_shopping_list())


#@mcp.tool
#def list_stores() -> 'list[str]':
#    return Data().get_stores()


#@mcp.tool
#def list_purchases(store: str) -> 'list[str]':
#    return Data().list_purchases(store)

# Configure CORS for browser-based clients
middleware = [
    Middleware(
        CORSMiddleware,
        allow_origins=["*"],  # Allow all origins; use specific origins for security
        allow_methods=["GET", "POST", "DELETE", "OPTIONS"],
        allow_headers=[
            "mcp-protocol-version",
            "mcp-session-id",
            "Authorization",
            "Content-Type",
        ],
        expose_headers=["mcp-session-id"],
    )
]



if __name__ == "__main__":

       # Create the ASGI app
    mcp_app = mcp.http_app(
            path="/mcp",
            # middleware=middleware
            )

    # Create a Starlette app and mount the MCP server
    app = Starlette(
        routes=[
            Mount("/mcp-server", app=mcp_app),
            # Add other routes as needed
        ],
        lifespan=mcp_app.lifespan,
    )

    # http_app = mcp.http_app(transport="streamable-http",path="/",middleware=custom_middleware)
    http_app = mcp.http_app(transport="streamable-http",path="/",middleware=middleware)
    # http_app = mcp.http_app(transport="streamable-http",path="/")
    uvicorn.run(http_app, host=MY_IP, port=9000)

