syntax = "proto3";
package StatusAttributions;

message StatusAttribution {
    optional Type type = 1;
    optional string actionUrl = 2;
    oneof attributionData {
        StatusAttribution.StatusReshare statusReshare = 3;
        StatusAttribution.ExternalShare externalShare = 4;
        StatusAttribution.Music music = 5;
        StatusAttribution.GroupStatus groupStatus = 6;
    }
    message ExternalShare {
        optional string actionUrl = 1;
        optional Source source = 2;
        optional int32 duration = 3;
        optional string actionFallbackUrl = 4;
        enum Source {
            UNKNOWN = 0;
            INSTAGRAM = 1;
            FACEBOOK = 2;
            MESSENGER = 3;
            SPOTIFY = 4;
            YOUTUBE = 5;
            PINTEREST = 6;
        }
    }
    message GroupStatus {
        optional string authorJid = 1;
    }
    message Music {
        optional string authorName = 1;
        optional string songId = 2;
        optional string title = 3;
        optional string author = 4;
        optional string artistAttribution = 5;
        optional bool isExplicit = 6;
    }
    message StatusReshare {
        optional Source source = 1;
        optional Metadata metadata = 2;
        message Metadata {
            optional int32 duration = 1;
            optional string channelJid = 2;
            optional int32 channelMessageId = 3;
            optional bool hasMultipleReshares = 4;
        }
        enum Source {
            UNKNOWN = 0;
            INTERNAL_RESHARE = 1;
            MENTION_RESHARE = 2;
            CHANNEL_RESHARE = 3;
        }
    }
    enum Type {
        RESHARE = 0;
        EXTERNAL_SHARE = 1;
        MUSIC = 2;
        STATUS_MENTION = 3;
        GROUP_STATUS = 4;
    }
}