package com.rjconsultores.ventaboletos.anotacao;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Anotação para marcar campos que devem ser renderizados e utilizados no Render Padrão {@link RenderPadrao}.
 * 
 * A anotação permite configurar um conversor personalizado e especificar a posição de ordenação dos campos.
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Renderizado {
    
    /**
     * Define a classe do conversor que será usado para converter o valor do campo.
     * 
     * @return A classe Enum do conversor que deve obrigatoriamente 
     * implementar o um metodo String buscarPeloValor( String valor).
     */
    Class<? extends Enum<?>> conversor() default DefaultEnum.class;
    
    /**
     * Define o nome do método do conversor que será chamado para converter o valor do campo.
     * 
     * @return O nome do método do conversor. O padrão é "buscarPeloValor".
     */
    String metodoConversor() default "buscarPeloValor";
    
    /**
     * Define a posição de ordenação do campo. Campos com valores menores são ordenados primeiro.
     * 
     * @return A posição numerica de ordenação do campo  .
     */
    int posicao() default Integer.MAX_VALUE;
    
    enum DefaultEnum {       
    }
}