package io.vertx.mysqlclient.impl.codec;

import io.vertx.mysqlclient.impl.util.Util;
import io.vertx.sqlclient.impl.ParamDesc;

import java.util.List;
import java.util.stream.Stream;

class MySQLParamDesc extends ParamDesc {
  private final ColumnDefinition[] paramDefinitions;

  MySQLParamDesc(ColumnDefinition[] paramDefinitions) {
    this.paramDefinitions = paramDefinitions;
  }

  ColumnDefinition[] paramDefinitions() {
    return paramDefinitions;
  }

  @Override
  public String prepare(List<Object> values) {
    if (values.size() != paramDefinitions.length) {
      return buildReport(values);
    }
//    for (int i = 0;i < paramDefinitions.length;i++) {
//      DataType paramDataType = paramDefinitions[i].type();
//      Object value = values.get(i);
//      Object val = DataTypeCodec.prepare(paramDataType, value);
//      if (val != value) {
//        if (val == DataTypeCodec.REFUSED_SENTINEL) {
//          return buildReport(values);
//        } else {
//          values.set(i, val);
//        }
//      }
//    }
    // TODO we can't really achieve type check for params because MySQL prepare response does not provide any useful information for param definitions
    return null;
  }

  // reuse from pg
  private String buildReport(List<Object> values) {
    return Util.buildInvalidArgsError(values.stream(), Stream.of(paramDefinitions).map(paramDefinition -> paramDefinition.type()).map(dataType -> dataType.binaryType));
  }
}