package com.orchard.models;

import java.util.List;
import org.apache.kafka.connect.data.Schema;
import org.apache.kafka.connect.data.SchemaBuilder;
import org.apache.kafka.connect.data.Struct;

public class GSLabelParticipant extends LabelParticipant {
    public String spotifyId;

    public String globalParticipantUuid;

    public String globalParticipantName;

    public String createdAt;

    public String lastModifiedAt;

    public List<String> roles;

    public static final org.apache.kafka.connect.data.Schema KafkaSchema = SchemaBuilder
            .struct().optional()
            .field("id", Schema.OPTIONAL_INT64_SCHEMA)
            .field("uuid", Schema.OPTIONAL_STRING_SCHEMA)
            .field("globalParticipantUuid", Schema.OPTIONAL_STRING_SCHEMA)
            .field("globalParticipantName", Schema.OPTIONAL_STRING_SCHEMA)
            .field("spotifyId", Schema.OPTIONAL_STRING_SCHEMA)
            .field("name", Schema.OPTIONAL_STRING_SCHEMA)
            .field("vendorId", Schema.OPTIONAL_INT64_SCHEMA)
            .field("createdAt", Schema.OPTIONAL_STRING_SCHEMA)
            .field("lastModifiedAt", Schema.OPTIONAL_STRING_SCHEMA)
            .field("roles",
                    SchemaBuilder.array(Schema.OPTIONAL_STRING_SCHEMA).optional().build())
            .field("distributionFlags",
                SchemaBuilder.array(Schema.OPTIONAL_STRING_SCHEMA).optional().build())
            .field("subaccountId", Schema.OPTIONAL_INT64_SCHEMA)
            .field("streamsStats", com.orchard.models.StreamsStats.KafkaSchema)
            .build();

    public Struct ToKafkaStruct() {
        return new Struct(KafkaSchema)
                .put("id", id)
                .put("uuid", uuid)
                .put("globalParticipantUuid", globalParticipantUuid)
                .put("globalParticipantName", globalParticipantName)
                .put("spotifyId", spotifyId)
                .put("name", name)
                .put("vendorId", vendorId)
                .put("createdAt", createdAt)
                .put("lastModifiedAt", lastModifiedAt)
                .put("roles", roles)
                .put("distributionFlags", distributionFlags)
                .put("subaccountId", subaccountId)
                .put("streamsStats", streamsStats.ToKafkaStruct());
    }
}
