package main

import (
	"fmt"
)

type TeamBase struct {
	m_TeamId   uint64
	m_Rid      uint32
	m_RoomRule uint32
	m_Players  []uint64
}

type TeamInt interface {
	Init()
	CreateTeam(accountId uint64, rid uint32) bool
	AddTeamPlayer(accountId uint64) bool
	DelTeamPlayer(accountId uint64) bool
	GetTeamBase() *TeamBase
}

type TeamNormal struct {
	TeamBase
}

func (this *TeamNormal) Init() {
	this.TeamBase.m_Players = make([]uint64, 0)
	this.TeamBase.m_TeamId = 0
	this.TeamBase.m_Rid = 0
	this.TeamBase.m_RoomRule = 0
}

func (this *TeamNormal) CreateTeam(accountId uint64, rid uint32) bool {
	this.TeamBase.m_TeamId = accountId
	this.TeamBase.m_Rid = rid
	this.TeamBase.m_Players = append(this.TeamBase.m_Players, accountId)
	return true
}

func (this *TeamNormal) AddTeamPlayer(accountId uint64) bool {
	this.TeamBase.m_Players = append(this.TeamBase.m_Players, accountId)
	return true
}

func (this *TeamNormal) DelTeamPlayer(accountId uint64) bool {
	return true
}

func (this *TeamNormal) GetTeamBase() *TeamBase {
	return &this.TeamBase
}

type TeamManager struct {
	m_teamList map[uint64]TeamInt
}

var teamMgr *TeamManager

func TeamManager_GetMe() *TeamManager {
	if teamMgr == nil {
		teamMgr = &TeamManager{
			m_teamList: make(map[uint64]TeamInt),
		}
	}
	return teamMgr
}

func (this *TeamManager) CreateTeam(teamId uint64, rid uint32) bool {
	this.DelTeam(teamId)
	tn := &TeamNormal{}
	tn.Init()
	tn.CreateTeam(teamId, rid)
	this.m_teamList[teamId] = interface{}(tn).(TeamInt)
	return true
}

func (this *TeamManager) DelTeam(teamId uint64) {
	if this.GetTeam(teamId) != nil {
		delete(this.m_teamList, teamId)
	}
}

func (this *TeamManager) GetTeam(teamId uint64) TeamInt {
	k, err := this.m_teamList[teamId]
	if !err {
		return nil
	}
	return k
}