package com.github.jcustenborder.kafka.connect.transform.common;

import com.google.common.base.Strings;
import org.apache.kafka.connect.data.Field;
import org.apache.kafka.connect.data.Schema;
import org.apache.kafka.connect.data.SchemaBuilder;
import org.apache.kafka.connect.data.Struct;
import org.apache.kafka.connect.sink.SinkRecord;
import org.apache.kafka.connect.transforms.Transformation;
import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;

public class SchemaNameToTopicTest {
  Transformation<SinkRecord> transformation  = new SchemaNameToTopic.Value<>();
  SinkRecord exampleRecord(Schema schema) {
    Struct struct = new Struct(schema);
    for (Field field : schema.fields()) {
      struct.put(field, Strings.repeat("x", 50));
    }
    return new SinkRecord(
        "test",
        0,
        null,
        null,
        schema,
        struct,
        1234L
    );

  }

  Schema exampleSchema(List<String> fieldNames, final int version) {
    SchemaBuilder builder = SchemaBuilder.struct()
        .name(this.getClass().getName());
    for (String fieldName : fieldNames) {
      builder.field(fieldName, Schema.STRING_SCHEMA);
    }
    builder.version(version);
    return builder.build();
  }

  @Test
  public void apply() {
    Schema schema = SchemaBuilder.struct()
        .name("com.foo.bar.whatever.ASDF")
        .field("firstName", Schema.OPTIONAL_STRING_SCHEMA)
        .build();
    SinkRecord input = exampleRecord(schema);
    SinkRecord actual = this.transformation.apply(input);
    assertNotNull(actual);
    assertEquals(schema.name(), actual.topic());


  }


}