from negotiation_agent.environment import NegotiationEnv
from negotiation_agent.agent import QLearningAgent
from usecases.train_agent_usecase import TrainAgentUseCase  # 유스케이스 임포트
import config


def main():
    # 1. 의존성(객체) 생성: 필요한 모든 '재료'를 준비합니다.
    env = NegotiationEnv(
        scenario=config.SCENARIO,
        target_price=config.TARGET_PRICE,
        threshold_price=config.THRESHOLD_PRICE,
    )

    agent = QLearningAgent(
        state_dims=env.observation_space.nvec,
        action_size=env.action_space.n,
        learning_rate=config.LEARNING_RATE,
        gamma=config.GAMMA,
        epsilon=config.EPSILON_START,
    )

    # 2. 유스케이스 생성 및 실행: 준비된 재료로 '요리사'에게 '요리'를 지시합니다.
    train_use_case = TrainAgentUseCase(env=env, agent=agent)
    train_use_case.execute()


if __name__ == "__main__":
    main()
