import { Colors, type ColorResolvable, EmbedBuilder } from "discord.js";
import { BRANDING } from "@shared/lib/constants";
import pkg from "../../package.json";

/**
 * Applies standard branding to an embed.
 */
function applyBranding(embed: EmbedBuilder): EmbedBuilder {
    return embed.setFooter({ 
        text: `${BRANDING.FOOTER_TEXT} v${pkg.version}` 
    });
}

/**
 * Creates a standardized error embed.
 * @param message The error message to display.
 * @param title Optional title for the embed. Defaults to "Error".
 * @returns An EmbedBuilder instance configured as an error.
 */
export function createErrorEmbed(message: string, title: string = "Error"): EmbedBuilder {
    const embed = new EmbedBuilder()
        .setTitle(`❌ ${title}`)
        .setDescription(message)
        .setColor(Colors.Red)
        .setTimestamp();
    
    return applyBranding(embed);
}

/**
 * Creates a standardized warning embed.
 * @param message The warning message to display.
 * @param title Optional title for the embed. Defaults to "Warning".
 * @returns An EmbedBuilder instance configured as a warning.
 */
export function createWarningEmbed(message: string, title: string = "Warning"): EmbedBuilder {
    const embed = new EmbedBuilder()
        .setTitle(`⚠️ ${title}`)
        .setDescription(message)
        .setColor(Colors.Yellow)
        .setTimestamp();

    return applyBranding(embed);
}

/**
 * Creates a standardized success embed.
 * @param message The success message to display.
 * @param title Optional title for the embed. Defaults to "Success".
 * @returns An EmbedBuilder instance configured as a success.
 */
export function createSuccessEmbed(message: string, title: string = "Success"): EmbedBuilder {
    const embed = new EmbedBuilder()
        .setTitle(`✅ ${title}`)
        .setDescription(message)
        .setColor(Colors.Green)
        .setTimestamp();

    return applyBranding(embed);
}

/**
 * Creates a standardized info embed.
 * @param message The info message to display.
 * @param title Optional title for the embed. Defaults to "Info".
 * @returns An EmbedBuilder instance configured as info.
 */
export function createInfoEmbed(message: string, title: string = "Info"): EmbedBuilder {
    const embed = new EmbedBuilder()
        .setTitle(`ℹ️ ${title}`)
        .setDescription(message)
        .setColor(Colors.Blue)
        .setTimestamp();

    return applyBranding(embed);
}

/**
 * Creates a standardized base embed with common configuration.
 * @param title Optional title for the embed.
 * @param description Optional description for the embed.
 * @param color Optional color for the embed.
 * @returns An EmbedBuilder instance with base configuration.
 */
export function createBaseEmbed(title?: string, description?: string, color?: ColorResolvable): EmbedBuilder {
    const embed = new EmbedBuilder()
        .setTimestamp()
        .setColor(color ?? BRANDING.COLOR);

    if (title) embed.setTitle(title);
    if (description) embed.setDescription(description);

    return applyBranding(embed);
}

