const axios = require("axios").default;

// https://create.roblox.com/docs/reference/engine/enums/AssetType
const AssetType = {
    Image: 1,
    TShirt: 2,
    Audio: 3,
    Mesh: 4,
    Lua: 5,
    Hat: 8,
    Place: 9,
    Model: 10,
    Shirt: 11,
    Pants: 12,
    Decal: 13,
    Head: 17,
    Face: 18,
    Gear: 19,
    Badge: 21,
    Animation: 24,
    GamePass: 34,
    Plugin: 38,
    MeshPart: 40
};

async function getAssetInfo(assetId) {
    const res =  await axios.get("https://apis.roblox.com/toolbox-service/v1/items/details", {
        params: {
            assetIds: assetId
        },
        validateStatus: (status) => status === 403 || status === 404 || (status >= 200 && status < 300) // Allow 403/404 as a valid status (don't throw an error)
    });

    if (res.status < 200 || res.status > 300) {
        return {
            status: res.status
        }
    }

    const data = res.data.data;
    const assetInfo = data[0];
    
    return {
        status: res.status,
        id: assetId,
        name: assetInfo.asset.name,
        typeId: assetInfo.asset.typeId,
        creatorId: assetInfo.creator.id,
        price: assetInfo.product.price,
        productId: assetInfo.product.productId,
        forSale: assetInfo.product.isForSaleOrIsPublicDomain
    }
}

const SubmissionColumnsString = "map_id,unix_timestamp,user_id,username\n";

const SubmissionColumn = {
    ModelID: 0,
    UnixTimestamp: 1,
    UserID: 2,
    Username: 3
};

function getSubmissionLine(line) {
    const modelId = Number(line[SubmissionColumn.ModelID]);
    const timestamp = Number(line[SubmissionColumn.UnixTimestamp]);
    let userId = "";
    let username = "";
    
    // Backwards compatibility
    if (line.length > 2) {
        userId = Number(line[SubmissionColumn.UserID]);
        username = line[SubmissionColumn.Username];
    }

    return {
        modelId: modelId,
        timestamp: timestamp,
        userId: userId,
        username: username
    };
}

function createSubmissionLine(modelId, timestamp, userId, username) {
    return `${modelId},${timestamp},${userId},${username}\n`;
}

module.exports = { AssetType, getAssetInfo, SubmissionColumn, SubmissionColumnsString, getSubmissionLine, createSubmissionLine };