"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.activityPubContextify = exports.getContextData = void 0;
function activityPubContextify(data, type) {
    return Object.assign(Object.assign({}, getContextData(type)), data);
}
exports.activityPubContextify = activityPubContextify;
const contextStore = {
    Video: buildContext({
        Hashtag: 'as:Hashtag',
        uuid: 'sc:identifier',
        category: 'sc:category',
        licence: 'sc:license',
        subtitleLanguage: 'sc:subtitleLanguage',
        sensitive: 'as:sensitive',
        language: 'sc:inLanguage',
        identifier: 'sc:identifier',
        icons: 'as:icon',
        isLiveBroadcast: 'sc:isLiveBroadcast',
        liveSaveReplay: {
            '@type': 'sc:Boolean',
            '@id': 'pt:liveSaveReplay'
        },
        permanentLive: {
            '@type': 'sc:Boolean',
            '@id': 'pt:permanentLive'
        },
        latencyMode: {
            '@type': 'sc:Number',
            '@id': 'pt:latencyMode'
        },
        Infohash: 'pt:Infohash',
        originallyPublishedAt: 'sc:datePublished',
        views: {
            '@type': 'sc:Number',
            '@id': 'pt:views'
        },
        state: {
            '@type': 'sc:Number',
            '@id': 'pt:state'
        },
        size: {
            '@type': 'sc:Number',
            '@id': 'pt:size'
        },
        fps: {
            '@type': 'sc:Number',
            '@id': 'pt:fps'
        },
        commentsEnabled: {
            '@type': 'sc:Boolean',
            '@id': 'pt:commentsEnabled'
        },
        downloadEnabled: {
            '@type': 'sc:Boolean',
            '@id': 'pt:downloadEnabled'
        },
        waitTranscoding: {
            '@type': 'sc:Boolean',
            '@id': 'pt:waitTranscoding'
        },
        support: {
            '@type': 'sc:Text',
            '@id': 'pt:support'
        },
        likes: {
            '@id': 'as:likes',
            '@type': '@id'
        },
        dislikes: {
            '@id': 'as:dislikes',
            '@type': '@id'
        },
        shares: {
            '@id': 'as:shares',
            '@type': '@id'
        },
        comments: {
            '@id': 'as:comments',
            '@type': '@id'
        }
    }),
    Playlist: buildContext({
        Playlist: 'pt:Playlist',
        PlaylistElement: 'pt:PlaylistElement',
        position: {
            '@type': 'sc:Number',
            '@id': 'pt:position'
        },
        startTimestamp: {
            '@type': 'sc:Number',
            '@id': 'pt:startTimestamp'
        },
        stopTimestamp: {
            '@type': 'sc:Number',
            '@id': 'pt:stopTimestamp'
        },
        uuid: 'sc:identifier'
    }),
    CacheFile: buildContext({
        expires: 'sc:expires',
        CacheFile: 'pt:CacheFile'
    }),
    Flag: buildContext({
        Hashtag: 'as:Hashtag'
    }),
    Actor: buildContext({
        playlists: {
            '@id': 'pt:playlists',
            '@type': '@id'
        },
        support: {
            '@type': 'sc:Text',
            '@id': 'pt:support'
        },
        icons: 'as:icon'
    }),
    WatchAction: buildContext({
        WatchAction: 'sc:WatchAction',
        startTimestamp: {
            '@type': 'sc:Number',
            '@id': 'pt:startTimestamp'
        },
        stopTimestamp: {
            '@type': 'sc:Number',
            '@id': 'pt:stopTimestamp'
        },
        watchSection: {
            '@type': 'sc:Number',
            '@id': 'pt:stopTimestamp'
        },
        uuid: 'sc:identifier'
    }),
    Collection: buildContext(),
    Follow: buildContext(),
    Reject: buildContext(),
    Accept: buildContext(),
    View: buildContext(),
    Announce: buildContext(),
    Comment: buildContext(),
    Delete: buildContext(),
    Rate: buildContext()
};
function getContextData(type) {
    return {
        '@context': contextStore[type]
    };
}
exports.getContextData = getContextData;
function buildContext(contextValue) {
    const baseContext = [
        'https://www.w3.org/ns/activitystreams',
        'https://w3id.org/security/v1',
        {
            RsaSignature2017: 'https://w3id.org/security#RsaSignature2017'
        }
    ];
    if (!contextValue)
        return baseContext;
    return [
        ...baseContext,
        Object.assign({ pt: 'https://joinpeertube.org/ns#', sc: 'http://schema.org/' }, contextValue)
    ];
}
//# sourceMappingURL=context.js.map