import os
import sys
from dotenv import load_dotenv
from py_clob_client.client import ClobClient
from py_clob_client.clob_types import OrderArgs , MarketOrderArgs
from py_clob_client.order_builder.constants import BUY,SELL
from py_clob_client.clob_types import OrderArgs
from py_clob_client.utilities import order_to_json

load_dotenv()

host: str = "https://clob.polymarket.com"
key: str = os.getenv("PRIVATE_KEY")
chain_id: int = 137 #No need to adjust this
POLYMARKET_PROXY_ADDRESS: str = "0xB1aB2e7586a32f9707eEdDd30Ae71244A37D32e7"

client = ClobClient(host, key=key, chain_id=chain_id, signature_type=1, funder=POLYMARKET_PROXY_ADDRESS)

api_creds =client.create_or_derive_api_creds()
print("API Creds:", api_creds)
client.set_api_creds(api_creds)
if len(sys.argv) != 5 and len(sys.argv)  != 1:
    print("Usage: python test.py <price_buy_value> <token_id> <size> <side>")
    sys.exit(1)

print("Creating order...")

if len(sys.argv) == 1: 
    price = 0.04
    token_id = "33945469250963963541781051637999677727672635213493648594066577298999471399137"
    size = 5.0
    side = SELL
else:
    price = float(sys.argv[1])
    token_id = sys.argv[2]
    size = float(sys.argv[3])
    side = sys.argv[4]

assert side in [BUY,SELL], "Side must be either BUY or SELL"
assert price > 0, "Price must be greater than 0"
assert price < 1, "Price must be less than 1"
assert size >= 5, "Size must be greater than or equal to 5"
total_cost = price * size

print(f"Placing order: token_id={token_id}, size={size}, side={side}, price={price}")
mo = OrderArgs(token_id=token_id, size=size, side=side, price=price)
signed_order = client.create_and_post_order(mo)
print(signed_order)

