private static async Task ProvisionTeamAsync(string accessToken, CreateFlightTeamRequest request)
        {
            // Initialize Graph client
            var graphClient = new GraphService(accessToken, logger);

            // Create the unified group
            var group = await CreateUnifiedGroupAsync(graphClient, request);

            // Create the team in the group
            var teamChannel = await InitializeTeamInGroupAsync(graphClient, group.Id,
                                                               $"Welcome to Flight {request.FlightNumber}!");

            // Copy flight log template to team files
            await CopyFlightLogToTeamFilesAsync(graphClient, group.Id);

            // Create Planner plan and tasks
            await CreatePreflightPlanAsync(graphClient, group.Id, teamChannel.Id, request.DepartureTime);

            // Create SharePoint list
            await CreateChallengingPassengersListAsync(graphClient, group.Id, teamChannel.Id);

            // Create SharePoint page
            if (createSharepointPage)
            {
                await CreateSharePointPageAsync(graphClient, group.Id, request.FlightNumber);
            }
        }
        private static async Task <Group> CreateUnifiedGroupAsync(GraphService graphClient, CreateFlightTeamRequest request)
        {
            // Initialize members list with pilots and flight attendants
            var members = await graphClient.GetUserIds(request.Pilots, request.FlightAttendants);

            // Handle admins
            var admin = await graphClient.GetUserByUpn(request.Admin);

            var me = await graphClient.GetMe();

            // Add admin and me as members
            members.Add($"https://graph.microsoft.com/beta/users/{admin.Id}");
            members.Add($"https://graph.microsoft.com/beta/users/{me.Id}");

            // Create owner list
            var owners = new List <string>()
            {
                $"https://graph.microsoft.com/beta/users/{admin.Id}",
                $"https://graph.microsoft.com/beta/users/{me.Id}"
            };

            // Create the group
            var flightGroup = new Group
            {
                DisplayName     = $"Flight {request.FlightNumber}",
                Description     = request.Description,
                Visibility      = "Private",
                MailEnabled     = true,
                MailNickname    = $"flight{request.FlightNumber}{GetTimestamp()}",
                GroupTypes      = new string[] { "Unified" },
                SecurityEnabled = false,
                Extension       = new ProvisioningExtension {
                    SharePointItemId = request.SharePointItemId
                },
                Members = members.Distinct().ToList(),
                Owners  = owners.Distinct().ToList()
            };

            var createdGroup = await graphClient.CreateGroupAsync(flightGroup);

            logger.Info("Created group");

            // Add catering liaison as a guest
            var guestInvite = new Invitation
            {
                InvitedUserEmailAddress = request.CateringLiaison,
                InviteRedirectUrl       = "https://teams.microsoft.com",
                SendInvitationMessage   = true
            };

            var createdInvite = await graphClient.CreateGuestInvitationAsync(guestInvite);

            // Add guest user to team
            await graphClient.AddMemberAsync(createdGroup.Id, createdInvite.InvitedUser.Id);

            logger.Info("Added guest user");

            return(createdGroup);
        }