import { Server } from "socket.io";

let io: Server | null = null;

export function initSocket(server: any) {
    io = new Server(server, {
        cors: {
            origin: "*",
            methods: ["GET", "POST"]
        }
    });

    io.on("connection", (socket) => {
        socket.on("join_campaign", (campaignId: string) => {
            socket.join(`campaign_${campaignId}`);
            console.log(`Socket joined campaign: ${campaignId}`);
        });

        socket.on("disconnect", () => {
            console.log("Socket disconnected:", socket.id);
        });
    });

    return io;
}

export function getIO() {
    return io;
}

export function emitCampaignProgress(campaignId: string, data: { sent: number, total: number }) {
    if (io) {
        io.to(`campaign_${campaignId}`).emit("campaign_progress", data);
        io.emit("general_campaign_progress", { campaignId, ...data });
    }
}

export function emitCampaignStatus(campaignId: string, status: string) {
    if (io) {
        io.to(`campaign_${campaignId}`).emit("campaign_status", { status });
        io.emit("general_campaign_status", { campaignId, status });
    }
}
