package org.camunda.bpm.swagger.maven.spoon.processor;

import java.lang.annotation.Annotation;
import java.util.function.Predicate;

import io.swagger.annotations.ApiModel;
import lombok.extern.slf4j.Slf4j;
import spoon.processing.AbstractProcessor;
import spoon.reflect.declaration.CtAnnotation;
import spoon.reflect.declaration.CtClass;
import spoon.reflect.declaration.ModifierKind;

import static org.camunda.bpm.swagger.maven.spoon.processor.ClassPredicates.*;

/**
 * Processes all classes that end with "Dto" and annotates them with {@link ApiModel}.
 */
@Slf4j
public class ApiModelProcessor extends AbstractProcessor<CtClass<?>> {

  @Override
  public boolean isToBeProcessed(final CtClass<?> candidate) {
    return isNamedDto
        .and(isNotAbstract)
        .test(candidate);
  }

  @Override
  public void process(final CtClass<?> element) {

    final CtAnnotation<Annotation> annotation = getFactory().Code().createAnnotation(getFactory().Code().createCtTypeReference(ApiModel.class));
    element.addAnnotation(annotation);
    log.debug("Add ApiModel to {}", element.getQualifiedName());
  }

}