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.positions import ConfirmResponse, EquityDividendConfirmRequest, EquityDividendPreviewRequest, EquityPortfolioSummary, EquityPosition, EquitySellConfirmRequest, EquitySellPreviewRequest, PreviewResponse
from jarvis_finance.services.equity_service import get_equity_position, get_equity_summary, list_equity_positions
from jarvis_finance.services.manual_entry_service import confirm_equity_dividend, confirm_equity_sell, preview_equity_dividend, preview_equity_sell

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


@router.get("/equity/positions", response_model=list[EquityPosition])
def equity_positions(conn: Connection = Depends(get_db)) -> list[EquityPosition]:
    return list_equity_positions(conn)


@router.get("/equity/summary", response_model=EquityPortfolioSummary)
def equity_summary(conn: Connection = Depends(get_db)) -> EquityPortfolioSummary:
    return get_equity_summary(conn)


@router.get("/equity/positions/{position_id}", response_model=EquityPosition)
def equity_position(position_id: str, conn: Connection = Depends(get_db)) -> EquityPosition:
    return get_equity_position(conn, position_id)


@router.post("/equity/actions/sell/preview", response_model=PreviewResponse)
def equity_sell_preview(request: EquitySellPreviewRequest, conn: Connection = Depends(get_db)) -> PreviewResponse:
    return preview_equity_sell(conn, request)


@router.post("/equity/actions/sell/confirm", response_model=ConfirmResponse)
def equity_sell_confirm(request: EquitySellConfirmRequest, conn: Connection = Depends(get_db)) -> ConfirmResponse:
    return confirm_equity_sell(conn, request)


@router.post("/equity/actions/dividend/preview", response_model=PreviewResponse)
def equity_dividend_preview(request: EquityDividendPreviewRequest, conn: Connection = Depends(get_db)) -> PreviewResponse:
    return preview_equity_dividend(conn, request)


@router.post("/equity/actions/dividend/confirm", response_model=ConfirmResponse)
def equity_dividend_confirm(request: EquityDividendConfirmRequest, conn: Connection = Depends(get_db)) -> ConfirmResponse:
    return confirm_equity_dividend(conn, request)
