/*
 * Copyright 2022 Confluent Inc.
 *
 * Licensed under the Confluent Community License (the "License"); you may not use
 * this file except in compliance with the License.  You may obtain a copy of the
 * License at
 *
 * http://www.confluent.io/confluent-community-license
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OF ANY KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations under the License.
 */

package io.confluent.ksql.physicalplanner.nodes;

import com.google.common.collect.ImmutableList;
import io.confluent.ksql.name.ColumnName;
import java.util.Objects;

public abstract class SingleInputNode<AcceptsT extends Node<?>> implements Node<AcceptsT> {
  final Node<?> input;
  final ImmutableList<ColumnName> keyColumns;
  final ImmutableList<ColumnName> valueColumns;

  SingleInputNode(
      final Node<?> input,
      final ImmutableList<ColumnName> keyColumns,
      final ImmutableList<ColumnName> valueColumns
  ) {
    this.input = Objects.requireNonNull(input, "input");
    this.keyColumns = Objects.requireNonNull(keyColumns, "keyColumns");
    this.valueColumns = Objects.requireNonNull(valueColumns, "valueColumns");
  }

  @Override
  public ImmutableList<ColumnName> keyColumnNames() {
    return keyColumns;
  }

  @Override
  public ImmutableList<ColumnName> valueColumnNames() {
    return valueColumns;
  }

  public Node<?> getInputNode() {
    return input;
  }

}
