#!/usr/bin/env python3
"""Expected KRW profit calculator for tactical US stock ideas."""

from __future__ import annotations

import argparse
import json


def parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser()
    parser.add_argument("--budget-krw", type=float, required=True)
    parser.add_argument("--price-usd", type=float, required=True)
    parser.add_argument("--usdkrw", type=float, required=True)
    parser.add_argument("--expected-return-pct", type=float, required=True)
    parser.add_argument("--stop-loss-pct", type=float, required=True)
    parser.add_argument("--tax-rate-pct", type=float, default=22.0)
    parser.add_argument("--fee-buffer-pct", type=float, default=0.3)
    parser.add_argument("--realized-gain-taxable", action="store_true")
    return parser.parse_args()


def main() -> int:
    args = parse_args()
    per_share_krw = args.price_usd * args.usdkrw * (1 + args.fee_buffer_pct / 100)
    shares = int(args.budget_krw // per_share_krw)
    exposure_krw = shares * args.price_usd * args.usdkrw
    gross_profit = exposure_krw * args.expected_return_pct / 100
    gross_loss = exposure_krw * abs(args.stop_loss_pct) / 100
    tax_drag = gross_profit * args.tax_rate_pct / 100 if args.realized_gain_taxable and gross_profit > 0 else 0
    fee_drag = exposure_krw * args.fee_buffer_pct / 100
    net_profit = gross_profit - tax_drag - fee_drag
    result = {
        "shares": shares,
        "exposure_krw": round(exposure_krw),
        "gross_profit_krw": round(gross_profit),
        "max_loss_krw": round(gross_loss),
        "tax_drag_krw": round(tax_drag),
        "fee_buffer_krw": round(fee_drag),
        "net_profit_krw": round(net_profit),
        "budget_left_krw": round(args.budget_krw - shares * per_share_krw),
    }
    print(json.dumps(result, ensure_ascii=False, indent=2))
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
