# app/main.py
from fastapi import FastAPI
from app.api.v1.crypto_api import router as crypto_router
from app.api.v1.guest_api import router as guest_router
from app.api.v1.category_api import router as category_router
from app.api.v1.category_style import router as category_style_router
from app.api.v1.history import router as history_router
from app.api.v1.dashboard_api import router as dashboard_router
from app.api.v1.store_s3 import router as store_s3_router
from app.api.v1.logout import router as logout_router
from app.api.v1.social_api import router as social_router
from app.api.v1.save_subscruption import router as save_subscription_router
from app.api.v1.delete_account import router as delete_account_router
from app.api.v1.auto_login import router as auto_login_router
from app.api.v1.profile_update import router as profile_update_router
from app.api.v1.cat_icon import router as category_icon_router
from app.api.v1.webhook import router as webhook_router
from app.api.v1.cron_api import router as cron_router
# from app.api.v1.redirect_url import router as redirecte_url
from fastapi.responses import ORJSONResponse
from app.core.error_handlers import register_exception_handlers
from app.db import base
app = FastAPI(default_response_class=ORJSONResponse)
from fastapi import FastAPI, Request
from fastapi.responses import RedirectResponse
from app.core.config import settings

# register global error handlers for the whole app
register_exception_handlers(app)
ios_pkg = settings.ISO_PKG


# @app.post("/callback")
# async def callback(request: Request):
#     package_name = ios_pkg
#     params = (await request.body()).decode("utf-8")
#     # redirect_url = f"intent://callback?{params}#Intent;package={package_name};scheme=signinwithapple;end"
#     if params:
#         # Forward the params if present
#         redirect_url = f"signinwithapple://callback?{params}"
#     else:
#         # Fallback if nothing is passed
#         redirect_url = "signinwithapple://callback"
#     return RedirectResponse(url=redirect_url, status_code=302)

@app.api_route("/callback", methods=["GET", "POST"])
async def callback(request: Request):
    body = (await request.body()).decode("utf-8").strip()

    if body:
        # Forward the params if present
        redirect_url = f"signinwithapple://callback?{body}"
    else:
        # Also capture query params in case of GET ?code=...&state=...
        query = str(request.query_params)
        if query:
            redirect_url = f"signinwithapple://callback?{query}"
        else:
            redirect_url = "signinwithapple://callback"

    return RedirectResponse(url=redirect_url, status_code=302)

# mount routers
app.include_router(crypto_router, prefix="/v1/crypto")
app.include_router(guest_router, prefix="/v1")
app.include_router(category_router, prefix="/v1")
app.include_router(category_style_router, prefix="/v1")
app.include_router(history_router, prefix="/v1")
app.include_router(dashboard_router, prefix="/v1")
app.include_router(store_s3_router, prefix="/v1")
app.include_router(logout_router, prefix="/v1")
app.include_router(social_router, prefix="/v1")
app.include_router(save_subscription_router, prefix="/v1")
app.include_router(delete_account_router, prefix="/v1")
app.include_router(auto_login_router, prefix="/v1")
app.include_router(profile_update_router, prefix="/v1")
app.include_router(category_icon_router, prefix="/v1")
app.include_router(webhook_router, prefix="/v1")
app.include_router(cron_router, prefix="/v1")
# app.include_router(redirecte_url,prefix="/v1")