private CustomerData GetNextSpawningCustomer(CustomerSpawnStrategy strategy)
    {
        switch (strategy)
        {
        case CustomerSpawnStrategy.Random:
            int index   = 0;
            int curIter = 0;
            while (true)
            {
                curIter++;
                if (curIter >= m_CustomerDataList.Count)
                {
                    throw new System.Exception("Cannot spawn next customer");
                }
                index = Random.Range(0, m_CustomerDataList.Count);
                CustomerData customerData = m_CustomerDataList[index];
                if (m_SpawnedCustomerCache.Exists(x => x.GetComponent <Customer>().Data.CharacterName == customerData.CharacterName) == false)
                {
                    return(customerData);
                }
            }

        default:
            return(new CustomerData());
        }
    }
    public void SpawnCustomerGroup(CustomerSpawnStrategy strategy, int groupNum, SpawnPosition selectedSpawner)
    {
        if (selectedSpawner == null)
        {
            return;
        }

        CustomerData leaderData = GetNextSpawningCustomer(strategy);
        Customer     leader     = SpawnCustomer(leaderData, selectedSpawner);

        leader.SetAsLeader();
        Blackboard      leader_bb = leader.GetComponent <Blackboard>();
        CustomerGroup   group     = CustomerGroup.CreateGroup(leader);
        List <Customer> members   = new List <Customer>();

        //We can get positive relations from relaters, for now just get from closest relations
        for (int i = 0; i < leaderData.PositiveRelations.Count; ++i)
        {
            if (i >= groupNum - 1)
            {
                break;
            }

            //TODO add strategy here to choose relations
            Relationship relationShip = leaderData.PositiveRelations[i];
            CustomerData related      = LookupCustomer(relationShip.WithWho);
            Customer     member       = SpawnCustomer(related, selectedSpawner);

            members.Add(member);

            Blackboard member_bb = member.GetComponent <Blackboard>();
            if (member_bb)
            {
                member_bb.AddOrModifyBBValue <CustomerGroup>("Group", group);
            }
        }

        group.ExpandGroup(members);

        //add group into all members' blackboard
        if (leader_bb)
        {
            leader_bb.AddOrModifyBBValue <CustomerGroup>("Group", group);
        }
    }