"""
kis_trader.utils.position_sizing — 전략 공통 1회 매수 금액(원)
============================================================
``SLOT_MONEY_DEFAULT``(및 전략별 *_SLOT_MONEY) 를 그대로 쓰고,
과거 ``max_loss / sl_pct`` 로 포지션을 줄이던 방식은 폐기한다.
(금액 손실컷 ``MAX_LOSS_PER_TRADE_KRW`` 는 청산 엔진에서만 사용.)
"""
from __future__ import annotations

from ..utils.env import get_env_int


def invest_qty_for_price(entry_price: float, invest_krw: float) -> int:
    """
    1회 투자금으로 살 수 있는 정수 주수.
    주가가 투자금보다 비싸면 0 (최소 1주 강제 매수 없음).
    """
    if entry_price <= 0 or invest_krw <= 0:
        return 0
    qty = int(float(invest_krw) / entry_price)
    return qty if qty >= 1 else 0


def resolve_invest_amount_krw(
    slot_money: int,
    *,
    max_loss_krw: int = 0,
    sl_pct: float = 0.0,
    extra_cap: int = 0,
) -> int:
    """
    1회 매수에 쓸 금액(원). 기본 = ``slot_money``.
    ``extra_cap`` > 0 이면 min(slot, extra_cap) — UPDOW 총한도 잔여 등.
    ``max_loss_krw`` / ``sl_pct`` 는 하위 호환용으로만 받고 투자금 산출에는 미사용.
    """
    base = int(slot_money or 0)
    if base <= 0:
        base = get_env_int("SLOT_MONEY_DEFAULT", 3_000_000)
    if extra_cap > 0:
        return int(min(base, extra_cap))
    return base
