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 LabelParticipant implements OrchardModel {
    public long id;

    public String uuid;

    public String name;

    public String globalParticipantName;

    public String vendorName;

    public String subaccountName;

    public long vendorId;

    public long subaccountId;

    public String createdAt;

    public String lastModifiedAt;

    public StreamsStats streamsStats;

    public List<String> distributionFlags;

    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("globalParticipantName", Schema.OPTIONAL_STRING_SCHEMA)
            .field("name", Schema.OPTIONAL_STRING_SCHEMA)
            .field("vendorName", Schema.OPTIONAL_STRING_SCHEMA)
            .field("subaccountName", Schema.OPTIONAL_STRING_SCHEMA)
            .field("vendorId", Schema.OPTIONAL_INT64_SCHEMA)
            .field("subaccountId", Schema.OPTIONAL_INT64_SCHEMA)
            .field("createdAt", Schema.OPTIONAL_STRING_SCHEMA)
            .field("lastModifiedAt", Schema.OPTIONAL_STRING_SCHEMA)
            .field("distributionFlags",
                SchemaBuilder.array(Schema.OPTIONAL_STRING_SCHEMA).optional().build())
            .field("streamsStats", com.orchard.models.StreamsStats.KafkaSchema)
            .build();

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