/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package controlador;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Stroke;

/**
 *
 * @author ccandido
 */
public class ImpressorPreview extends BaseControlador {

    private final Impressor prn;

    int h = 0;
    int w = 0;
    int t = 0;
    int l = 0;

    private int pgatual = 0;
    private int tlpagina = 0;

    public int Largura;
    public int Altura;

    public ImpressorPreview(Impressor prn) {
        super();
        setDoubleBuffered(true);
        this.prn = prn;
        w = prn.Impressora.getPageWidth();
        h = prn.Impressora.getPageHeigth();

        l = (int) prn.Impressora.getPage().getPaper().getImageableX();
        t = (int) prn.Impressora.getPage().getPaper().getImageableY();

        tlpagina = prn.getQtdPagina();
        Largura = prn.Impressora.getRealFolhaWidth();
        Altura = prn.Impressora.getRealFolhaHeigth();
        //setPreferredSize(getSize());
        setBackground(Color.WHITE);
    }

    public int getPgatual() {
        return pgatual;
    }

    public void setPgatual(int pgatual) {
        this.pgatual = pgatual;
        if (pgatual > tlpagina || pgatual < 0) {
            pgatual = 0;
        }
    }

    public int getTlpagina() {
        return tlpagina;
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g); //paint background
        RenderingHints renderHints
                = new RenderingHints(RenderingHints.KEY_ANTIALIASING,
                        RenderingHints.VALUE_ANTIALIAS_ON);
        renderHints.put(RenderingHints.KEY_RENDERING,
                RenderingHints.VALUE_RENDER_QUALITY);

        Graphics2D Canvas = (Graphics2D) g;
        Canvas.addRenderingHints(renderHints);

//        Canvas.setPaint(Color.BLACK);
//        Canvas.draw3DRect(0, 0, getWidth() - 4, getHeight() - 4, true);
        Canvas.setPaint(Color.BLACK);
        Stroke stroke = new BasicStroke(1.f,
                BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER);
        Canvas.setStroke(stroke);

        Canvas.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
        Canvas.setPaint(Color.GRAY);
        Canvas.drawRect(0, 0, getWidth() - 2, getHeight() - 2);

        if (pgatual == 0) {
            return;
        }
        float[] dash4 = {2f, 2f, 2f};

        BasicStroke bs4 = new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 1.0f, dash4,
                2f);
        Canvas.setStroke(bs4);

        Canvas.drawLine(l - 1, 1, l - 1, getHeight() - 1);
        Canvas.drawLine(l + w + 1, 1, l + w + 1, getHeight() - 1);
        Canvas.drawLine(1, t - 1, getWidth() - 1, t - 1);
        Canvas.drawLine(1, t + h + 1, getWidth() - 1, t + h + 1);

        Canvas.setStroke(new BasicStroke(
                1f,
                BasicStroke.CAP_ROUND,
                BasicStroke.JOIN_ROUND));
        Canvas.setPaint(Color.BLACK);
        DrawPagina(Canvas);
    }

    private void DrawPagina(Graphics2D Canvas) {
        if (pgatual > 0) {
            Canvas.drawImage(prn.imgs[pgatual - 1], l, t, w, h, null); //melhor
            //Canvas.drawImage(prn.imgs[pgatual - 1], null, l, t);
            //Canvas.drawImage(prn.imgs[pgatual -1], l, t, null);
        }
    }
    
    public void PrintPg() {
        int pg = pgatual;
        prn.iniceImpressaoNoPreview(pg);
        prn.Impressora.print();
        prn.finalizeImpressaoNoPreview();
    }

    /**
     * A impressora já deve estar iniciada - já está no preview.
     */
    public void Print() {
        prn.Impressora.print();
    }

}