-- Définition de la commande
SLASH_RaidPLAYEREXPORT1, SLASH_RaidPLAYEREXPORT2, SLASH_RaidPLAYEREXPORT3 = "/RaidPlayerExport", "/RPE", "/ExportPlayerRaid"

-- Création de la fenêtre principale avec un fond solide
local frame = CreateFrame("Frame", "RaidPlayerExportFrame", UIParent, "BackdropTemplate")
frame:SetSize(320, 500) -- Augmenter la hauteur pour afficher plus de pseudos
frame:SetPoint("CENTER")
frame:SetMovable(true)
frame:EnableMouse(true)
frame:RegisterForDrag("LeftButton")
frame:SetScript("OnDragStart", frame.StartMoving)
frame:SetScript("OnDragStop", frame.StopMovingOrSizing)
frame:Hide()

-- Appliquer un fond plus sombre et une bordure stylisée
frame:SetBackdrop({
    bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
    edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border",
    tile = true, tileSize = 32, edgeSize = 32,
    insets = { left = 11, right = 12, top = 12, bottom = 11 }
})
frame:SetBackdropColor(0, 0, 0) -- RGBA: noir sans transparence

-- Titre mis à jour
frame.title = frame:CreateFontString(nil, "OVERLAY", "GameFontHighlightLarge")
frame.title:SetPoint("TOP", frame, "TOP", 0, -10)
frame.title:SetText("Liste des joueurs (0)")

-- Création du cadre pour les mentions du développeur
local developerFrame = CreateFrame("Frame", nil, UIParent, "BackdropTemplate")
developerFrame:SetSize(200, 100) -- Réduire la largeur et augmenter la hauteur
developerFrame:SetPoint("BOTTOM", frame, "TOP", 0, 10) -- Positionner au-dessus du cadre principal
developerFrame:SetBackdrop({
    bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
    edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border",
    tile = true, tileSize = 32, edgeSize = 32,
    insets = { left = 11, right = 12, top = 12, bottom = 11 }
})
developerFrame:SetBackdropColor(0, 0, 0) -- RGBA: noir sans transparence
developerFrame:Hide() -- Masquer par défaut

-- Titre de l'addon
local addonTitle = developerFrame:CreateFontString(nil, "OVERLAY", "GameFontHighlightLarge")
addonTitle:SetPoint("TOP", developerFrame, "TOP", 0, -15)
addonTitle:SetText("Raid Player Export")
addonTitle:SetJustifyH("CENTER")

-- Mention du développeur
local developerLabel1 = developerFrame:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
developerLabel1:SetPoint("TOP", addonTitle, "BOTTOM", 0, -10)
developerLabel1:SetText("Créé par Eiganjos")
developerLabel1:SetJustifyH("CENTER")

local developerLabel2 = developerFrame:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
developerLabel2:SetPoint("TOP", developerLabel1, "BOTTOM", 0, -5)
developerLabel2:SetText("Serveur: Archimonde")
developerLabel2:SetJustifyH("CENTER")

local developerLabel3 = developerFrame:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
developerLabel3:SetPoint("TOP", developerLabel2, "BOTTOM", 0, -5)
developerLabel3:SetText("Guilde: La BL et le Bait")
developerLabel3:SetJustifyH("CENTER")

-- Bouton de fermeture
local closeButton = CreateFrame("Button", nil, frame, "UIPanelCloseButton")
closeButton:SetPoint("TOPRIGHT", frame, "TOPRIGHT", -5, -5)
closeButton:SetScript("OnClick", function()
    frame:Hide()
    developerFrame:Hide() -- Masquer également le cadre des mentions
end)

-- Zone d'affichage avec un ScrollFrame et un EditBox en lecture seule
local scrollFrame = CreateFrame("ScrollFrame", nil, frame, "UIPanelScrollFrameTemplate")
scrollFrame:SetSize(260, 440) -- Augmenter la hauteur pour afficher plus de pseudos
scrollFrame:SetPoint("TOPLEFT", frame, "TOPLEFT", 15, -40)
scrollFrame:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -35, 50)

local editBox = CreateFrame("EditBox", nil, scrollFrame)
editBox:SetMultiLine(true)
editBox:SetAllPoints(scrollFrame)
editBox:SetFontObject("ChatFontNormal")
editBox:SetJustifyH("LEFT")
editBox:SetText("")
editBox:EnableMouse(false) -- Désactiver les interactions souris par défaut
editBox:SetAutoFocus(false) -- Ne prend pas le focus automatiquement
editBox:SetScript("OnEscapePressed", function(self) self:ClearFocus() end)
editBox:SetScript("OnKeyDown", function(self, key)
    if key == "CTRL" or key == "C" then
        return
    end
end) -- Autoriser les événements de touche pour CTRL+C
editBox:SetScript("OnChar", function() end) -- Empêche la saisie de caractères
editBox:SetScript("OnTextChanged", function() end) -- Empêche les changements de texte
editBox:SetScript("OnMouseDown", function() editBox:SetFocus(false) end) -- Empêche le focus sur clic
editBox:SetScript("OnMouseUp", function(self)
    self:SetFocus(true)
    self:HighlightText()
end)
editBox:Enable() -- Activer l'EditBox pour permettre la copie
editBox:SetScript("OnTextChanged", function(self)
    self:SetText(self:GetText()) -- Empêche toute modification
end)
editBox:SetScript("OnShow", function(self)
    self:ClearFocus() -- Assure que le champ n'est pas sélectionné par défaut
    self:SetText("") -- Efface tout texte existant
end)

-- Bouton "Copier les pseudos"
local copyButton = CreateFrame("Button", nil, frame, "UIPanelButtonTemplate")
copyButton:SetSize(120, 25) -- Augmenter la largeur pour le texte plus long
copyButton:SetPoint("BOTTOM", frame, "BOTTOM", 50, 10) -- Positionner à droite
copyButton:SetText("Copier les pseudos")
copyButton:SetScript("OnClick", function()
    editBox:EnableMouse(true) -- Activer la sélection de texte seulement sur clic
    editBox:SetFocus(true)
    editBox:HighlightText()
end)

-- Bouton "Générer"
local generateButton = CreateFrame("Button", nil, frame, "UIPanelButtonTemplate")
generateButton:SetSize(80, 25)
generateButton:SetPoint("BOTTOM", frame, "BOTTOM", -50, 10) -- Positionner à gauche
generateButton:SetText("Générer")
generateButton:SetScript("OnClick", function() ExportRaidList() end)

-- Fonction pour récupérer les pseudos et les afficher
function ExportRaidList()
    if not IsInRaid() then
        UIErrorsFrame:AddMessage("|cffff0000[Raid Player Export]: Vous n'êtes pas dans un raid !|r", 1.0, 1.0, 1.0, 1.0, 5)
        return
    end

    local raidList = {}
    for i = 1, MAX_RAID_MEMBERS do
        local name = GetRaidRosterInfo(i)
        if name then
            local shortName = string.match(name, "([^%-]+)") -- Retirer le serveur
            table.insert(raidList, shortName)
        end
    end

    if #raidList == 0 then
        UIErrorsFrame:AddMessage("|cffff0000[Raid Player Export]: Impossible d'obtenir les pseudos.|r", 1.0, 1.0, 1.0, 1.0, 5)
        return
    end

    -- Mettre à jour le texte et afficher la fenêtre
    editBox:SetText(table.concat(raidList, "\n"))
    frame.title:SetText("Liste des joueurs (" .. #raidList .. ")")
    frame:Show()
    developerFrame:Show() -- Afficher le cadre des mentions du développeur
end

-- Associer la commande à la fonction
SlashCmdList["RaidPLAYEREXPORT"] = function()
    frame:Show()
    developerFrame:Show()
    editBox:SetText("") -- Assure que la liste est vide par défaut
end
