package operations;

import com.jniwrapper.Parameter;
import com.jniwrapper.win32.automation.types.Variant;
import com.jniwrapper.win32.gdi.PrintParameters;
import com.jniwrapper.win32.ole.IOleObject;
import excel.excel.*;
import excel.excel.impl._WorkbookImpl;

/**
 * @author Yuriy Privezentsev
 */
public class ExcelPrintHandler extends OfficePrintHandler
{
    public void print()
    {
        Dialog printDialog = getPrintDialog();
        printDialog.show();
    }

    public void print(PrintParameters printParameters)
    {
        Dialog printDialog = getPrintDialog();
        Parameter[] dialogParameters = fillPrintDialogParameters(printParameters);
        printDialog.show(dialogParameters);
    }

    private Dialog getPrintDialog()
    {
        IOleObject oleObject = getContainer().getOleObject();

        _Workbook workbook = new _WorkbookImpl(oleObject);
        _Application application = workbook.getApplication();
        Dialogs dialogs = application.getDialogs();
        return dialogs.getItem(new XlBuiltInDialog(XlBuiltInDialog.xlDialogPrint));
    }

    private Parameter[] fillPrintDialogParameters(PrintParameters printParameters){
        Variant unspecifiedParameter = Variant.createUnspecifiedParameter();

        Parameter[] dialogParameters = new Parameter[]{unspecifiedParameter,
                new Variant(printParameters.getFromPage()),     //From
                new Variant(printParameters.getToPage()),       //To
                new Variant(printParameters.getNumCopies()),    //Copies
                unspecifiedParameter,
                unspecifiedParameter,
                unspecifiedParameter,
                unspecifiedParameter,
                unspecifiedParameter,
                unspecifiedParameter,
                unspecifiedParameter,
                unspecifiedParameter,
                unspecifiedParameter,
                unspecifiedParameter,                           //Print to file
                new Variant(printParameters.isCollate())        //Collate
        };

        return dialogParameters;
    }

}
