from __future__ import annotations

from sqlite3 import Connection

from fastapi import APIRouter, Depends

from jarvis_finance.api.dependencies import get_db
from jarvis_finance.api.schemas.overview import CashSummary
from jarvis_finance.api.schemas.positions import CashConfirmRequest, CashPositionDetail, CashPreviewRequest, CashSnapshotConfirmRequest, CashSnapshotPreviewRequest, ConfirmResponse, PreviewResponse
from jarvis_finance.services.cash_service import confirm_cash_snapshot, get_cash_position_detail, get_cash_summary, preview_cash_snapshot
from jarvis_finance.services.manual_entry_service import confirm_cash, preview_cash

router = APIRouter(tags=["cash"])


@router.get("/cash/summary", response_model=CashSummary)
def cash_summary(conn: Connection = Depends(get_db)) -> CashSummary:
    return get_cash_summary(conn)


@router.get("/cash/positions/{position_id}", response_model=CashPositionDetail)
def cash_position(position_id: str, conn: Connection = Depends(get_db)) -> CashPositionDetail:
    return get_cash_position_detail(conn, position_id)


@router.post("/cash/preview", response_model=PreviewResponse)
def cash_preview(request: CashPreviewRequest, conn: Connection = Depends(get_db)) -> PreviewResponse:
    return preview_cash(conn, request)


@router.post("/cash/confirm", response_model=ConfirmResponse)
def cash_confirm(request: CashConfirmRequest, conn: Connection = Depends(get_db)) -> ConfirmResponse:
    return confirm_cash(conn, request)


@router.post("/cash/snapshots/preview", response_model=PreviewResponse)
def cash_snapshot_preview(request: CashSnapshotPreviewRequest, conn: Connection = Depends(get_db)) -> PreviewResponse:
    return preview_cash_snapshot(conn, request)


@router.post("/cash/snapshots/confirm", response_model=ConfirmResponse)
def cash_snapshot_confirm(request: CashSnapshotConfirmRequest, conn: Connection = Depends(get_db)) -> ConfirmResponse:
    return confirm_cash_snapshot(conn, request)
