package main

import (
	"encoding/json"
	"fmt"
)

func CreateGameSession(token string) (string, string, error) {
	body := &CreateGameSessionBody{
		AliasId:               GlobalConfig.AliasId,
		FleetId:               GlobalConfig.FleetId,
		Name:                  "AutoCreateGameSession",
		CreatorId:             "",
		MaxClientSessionCount: 20,
		IdempotencyToken:      "",
		ServerSessionData:     "",
	}
	url := fmt.Sprintf(CreateGameSessionUrlPattern, GlobalConfig.FleetManagerAddr, GlobalConfig.FleetManagerPort, GlobalConfig.ProjectId)
	rsp, err := HttpClient.Post(url, body, token)
	if err != nil {
		Logger.Errorf("create game session failed: %s", err)
		return "", "", nil
	}
	session := &RespServerSession{}
	err = json.Unmarshal(rsp, session)
	if err != nil {
		Logger.Errorf("failed to unmarshal game session: %s", err)
		return "", "", nil
	}
	if session.ServerSessions.ServerSessionId == "" {
		Logger.Errorf("failed to create game session: %s", rsp)
		return "", "", fmt.Errorf("failed to create game session: %s", rsp)
	}
	return session.ServerSessions.ServerSessionId, session.ServerSessions.FleetId, nil
}

func QueryGameSession(gameSessionId string, fleetId string, token string) (string, error) {
	url := fmt.Sprintf(QueryGameSessionUrlPattern, GlobalConfig.FleetManagerAddr, GlobalConfig.FleetManagerPort, GlobalConfig.ProjectId, gameSessionId)
	queryParam := make(map[string]string)
	queryParam["fleet_id"] = fleetId
	rsp, err := HttpClient.Get(url, queryParam, token)
	if err != nil {
		Logger.Errorf("failed to get game session request: %s", err)
		return "", nil
	}
	session := &RespServerSession{}
	err = json.Unmarshal(rsp, session)
	if err != nil {
		Logger.Errorf("failed to unmarshal game session request: %s", err)
		return "", nil
	}
	return session.ServerSessions.State, nil
}

func Login() string {
	loginBody := &LoginBody{
		UserName: GlobalConfig.LoginName,
		Password: GlobalConfig.LoginPassword,
	}
	url := fmt.Sprintf(LoginUrlPattern, GlobalConfig.FleetManagerAddr, GlobalConfig.FleetManagerPort)
	rsp, err := HttpClient.Post(url, loginBody, "")
	if err != nil {
		Logger.Errorf("failed to get game session request: %s", err)
		return ""
	}
	loginResp := &LoginResp{}
	err = json.Unmarshal(rsp, loginResp)
	if err != nil {
		Logger.Errorf("failed to unmarshal game session request: %s", err)
		return ""
	}
	Logger.Infof("login success")
	return loginResp.AuthToken
}