package com.imprimelibros.erp.presupuesto.marcapaginas;

import jakarta.validation.constraints.NotNull;
import jakarta.persistence.*;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;

@Entity
@Table(name = "marcapaginas")
public class Marcapaginas {
    
    public enum Acabado{
        ninguno,
        plastificado_brillo_1c,
        plastificado_brillo_2c,
        plastificado_mate_1c,
        plastificado_mate_2c
    };

    public enum Tamanios{
        _50x140_, _50x170_, _50x210_
    };

    public enum Papeles{
        cartulina_grafica, estucado_mate
    };

    public enum Caras_Impresion{
        una_cara, dos_caras
    };

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotNull(message = "{validation.required}")
    @Enumerated(EnumType.STRING)
    private Caras_Impresion carasImpresion = Caras_Impresion.una_cara;

    @NotNull(message = "{validation.required}")
    @Enumerated(EnumType.STRING)
    private Tamanios tamanio = Tamanios._50x140_;
    
    @NotNull(message = "{validation.required}")
    @Enumerated(EnumType.STRING)
    private Papeles papel = Papeles.cartulina_grafica;
    
    @NotNull(message = "{validation.required}")
    private Integer gramaje = 300;
    
    @NotNull(message = "{validation.required}")
    @Enumerated(EnumType.STRING)
    private Acabado acabado = Acabado.ninguno;

    @Min(value = 100, message = "{validation.min}")
    @NotNull(message = "{validation.required}")
    private Integer unidades_min = 100;
    
    @Min(value = 101, message = "{validation.min}")
    @NotNull(message = "{validation.required}")
    private Integer unidades_max = 5000;
    
    @NotNull(message = "{validation.required}")
    private Double precio_unidades_min;
    
    @NotNull(message = "{validation.required}")
    private Double precio_unidades_max;
    
    @NotNull(message = "{validation.required}")
    @Min(value = 0, message = "{validation.min}")
    @Max(value = 300, message = "{validation.max}")
    
    private Integer margen_unidades_min = 0;
    
    @NotNull(message = "{validation.required}")
    @Min(value = 0, message = "{validation.min}")
    @Max(value = 300, message = "{validation.max}")
    private Integer margen_unidades_max = 0;

    /* Getters and Setters */
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public Caras_Impresion getCarasImpresion() {
        return carasImpresion;
    }
    public void setCarasImpresion(Caras_Impresion carasImpresion) {
        this.carasImpresion = carasImpresion;
    }
    public Tamanios getTamanio() {
        return tamanio;
    }
    public void setTamanio(Tamanios tamanio) {
        this.tamanio = tamanio;
    }
    public Papeles getPapel() {
        return papel;
    }
    public void setPapel(Papeles papel) {
        this.papel = papel;
    }
    public Integer getGramaje() {
        return gramaje;
    }
    public void setGramaje(Integer gramaje) {
        this.gramaje = gramaje;
    }
    public Acabado getAcabado() {
        return acabado;
    }
    public void setAcabado(Acabado acabado) {
        this.acabado = acabado;
    }
    public Integer getUnidades_min() {
        return unidades_min;
    }
    public void setUnidades_min(Integer unidades_min) {
        this.unidades_min = unidades_min;
    }
    public Integer getUnidades_max() {
        return unidades_max;
    }
    public void setUnidades_max(Integer unidades_max) {
        this.unidades_max = unidades_max;
    }
    public Double getPrecio_unidades_min() {
        return precio_unidades_min;
    }
    public void setPrecio_unidades_min(Double precio_unidades_min) {
        this.precio_unidades_min = precio_unidades_min;
    }
    public Double getPrecio_unidades_max() {
        return precio_unidades_max;
    }
    public void setPrecio_unidades_max(Double precio_unidades_max) {
        this.precio_unidades_max = precio_unidades_max;
    }
    public Integer getMargen_unidades_min() {
        return margen_unidades_min;
    }
    public void setMargen_unidades_min(Integer margen_unidades_min) {
        this.margen_unidades_min = margen_unidades_min;
    }
    public Integer getMargen_unidades_max() {
        return margen_unidades_max;
    }
    public void setMargen_unidades_max(Integer margen_unidades_max) {
        this.margen_unidades_max = margen_unidades_max;
    }  

}
