// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

// Sub-schema: guildManagement — Actions related to creating, fetching, and managing guilds.
// Auto-generated by the onboarding scaffolder.

export type GuildManagementActions =
    | CreateGuildAction
    | GetGuildAction
    | LeaveGuildAction
    | GetCurrentUserGuildsAction
    | GetCurrentUserGuildMemberAction;

// Creates a new guild.
// Sample phrases:
//   - "Can you create a new guild for me called 'Knights of Valor' in the US region with this icon?"
//   - "I need a new guild named 'Dragon Slayers' in the EU region. Use this icon for it."
//   - "Please set up a guild called 'Mystic Warriors' in the Asia region and use this icon."
export type CreateGuildAction = {
    actionName: "createGuild";
    parameters: {
        // The name of the guild.
        name: string;
        // The region where the guild will be created.
        region?: string;
        // The icon for the guild.
        icon?: string;
    };
};

// Fetches a guild object for a given guild ID.
// Sample phrases:
//   - "Can you get the details for the guild with ID 12345?"
//   - "Fetch the guild information for guild ID 67890, please."
//   - "I need the guild object for the guild with ID abcdef."
export type GetGuildAction = {
    actionName: "getGuild";
    parameters: {
        // The ID of the guild to fetch.
        guild_id: string;
    };
};

// Leave a guild. Returns a 204 empty response on success.
// Sample phrases:
//   - "I want to leave the server with ID 123456789."
//   - "Please remove me from the guild with ID 123456789."
//   - "Can you help me exit the guild? The ID is 123456789."
export type LeaveGuildAction = {
    actionName: "leaveGuild";
    parameters: {
        // The ID of the guild to leave.
        guild_id: string;
    };
};

// Returns a list of partial guild objects the current user is a member of.
// Sample phrases:
//   - "Can you show me the servers I'm part of?"
//   - "List all the guilds I'm currently in, please."
//   - "What are the Discord servers I belong to?"
export type GetCurrentUserGuildsAction = {
    actionName: "getCurrentUserGuilds";
    parameters?: {
        // Get guilds before this ID.
        before?: string;
        // Get guilds after this ID.
        after?: string;
        // The maximum number of guilds to return.
        limit?: number;
        // Whether to include member counts.
        with_counts?: boolean;
    };
};

// Returns a guild member object for the current user.
// Sample phrases:
//   - "Can you show me my member details for the server with ID 123456?"
//   - "Get my guild member info for the server 123456, please."
//   - "I need my member object for the guild with ID 123456."
export type GetCurrentUserGuildMemberAction = {
    actionName: "getCurrentUserGuildMember";
    parameters: {
        // The ID of the guild to fetch the member object from.
        guild_id: string;
    };
};
