using GMW_data;
using SteamWare;
using System;
using System.Drawing.Printing;
using System.Web.UI;

namespace GMW.WebUserControls
{
    public partial class mod_postFusioniBCode : System.Web.UI.UserControl
    {
        public event EventHandler eh_reqUpdate;
        protected void raiseUpdate()
        {
            // raise dell'evento
            if (eh_reqUpdate != null)
            {
                eh_reqUpdate(this, new EventArgs());
            }
        }
        /// <summary>
        /// stringa UID univoca
        /// </summary>
        public string uid
        {
            get
            {
                return this.UniqueID.Replace("$", "_").Replace("-", "_");
            }
        }
        /// <summary>
        /// load pagina!
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack) lblOut.Text = "";
        }
        /// <summary>
        /// effettua controlli visibilità
        /// </summary>
        private void doChecks()
        {
            checkBarcode();
        }
        /// <summary>
        /// wrapper traduzione
        /// </summary>
        /// <param name="lemma"></param>
        /// <returns></returns>
        public string traduci(object lemma)
        {
            return user_std.UtSn.Traduci(lemma.ToString());
        }
        /// <summary>
        /// valore barcode
        /// </summary>
        public string barcodeIn
        {
            get
            {
                return txtBarcode.Text.Trim();
            }
            set
            {
                txtBarcode.Text = value;
            }
        }
        /// <summary>
        /// controlla se ci sia un barcode
        /// </summary>
        private void checkBarcode()
        {
            if (barcodeIn != "")
            {
                Postazione.messaggiText = string.Format("Barcode digitato: {0}", barcodeIn);
                switch (MagClass.tipoBCode_L5(barcodeIn))
                {
                    case tipoCodiceBarcode.BarCodeCMD:
                        // chiamo stampa
                        try
                        {
                            bool fatto = stampaBCode();
                            if (fatto)
                            {
                                Postazione.messaggiText += " - " + traduci("BdcPrintDone");
                                Postazione.CssClass = "stileComandoOk";
                            }
                            else
                            {
                                Postazione.messaggiText += " - " + traduci("ERR-BCD-003");
                                logger.lg.scriviLog(traduci("ERR-BCD-003"), tipoLog.ERROR);
                                Postazione.CssClass = "stileComandoKo";
                            }
                        }
                        catch (Exception exc)
                        {
                            Postazione.messaggiText += " - " + traduci("ERR-BCD-002"); 
                            logger.lg.scriviLog(string.Format("{0}{1}{2}", traduci("ERR-BCD-002"), Environment.NewLine, exc), tipoLog.EXCEPTION);
                            Postazione.CssClass = "stileComandoKo";
                        }
                        break;
                    default:
                        Postazione.messaggiText += traduci("ERR-BCD-001");
                        Postazione.CssClass = "stileComandoND";
                        break;
                }
                barcodeIn = "";
            }
            else
            {
                Postazione.messaggiText = traduci("AttesaBCode");
                Postazione.CssClass = "stileAttesa";
            }
            doUpdate();
        }

        public void doUpdate()
        {
            raiseUpdate();
            txtBarcode.Focus();
        }

        /// <summary>
        /// testo da stampare in chiaro
        /// </summary>
        public string testoLabel
        {
            get
            {
                return string.Format(memLayer.ML.confReadString("bcodeLabFormatPI"), DateTime.Now, valore);
            }
        }
        /// <summary>
        /// testo in codice 39
        /// </summary>
        public string bCodeLabel
        {
            get
            {
                return string.Format(memLayer.ML.confReadString("bcodeValFormatPI"), DateTime.Now, valore);
            }
        }
        protected string valore
        {
            get
            {
                return barcodeIn.Replace("BCD", "");
            }
        }
        /// <summary>
        /// lancio stampa etichetta
        /// </summary>
        protected bool stampaBCode()
        {
            bool answ = false;
            // attenzione: page size deve essere uguale su printer e su richiesta!!! 62 x 29 mm = 2.44 x 1.14 pollici
            PaperSize pS = new PaperSize("label", memLayer.ML.confReadInt("bcodeLabelWidth"), memLayer.ML.confReadInt("bcodeLabelHeight"));
            // recupero printer da nome postazione
            string stampante = "";
            try
            {
                stampante = DataProxy.obj.taElPost.getByCod(valore)[0].stampante;
            }
            catch
            { }
            if (stampante != "")
            {
                // stampo il vero bcode su etichettatrice!!! ATTENZIONE
                bCodePrinter.man.Print(stampante, pS, testoLabel, bCodeLabel, memLayer.ML.confReadInt("bcodeFontBase"));
                answ = true;
            }
            else
            {
                logger.lg.scriviLog(string.Format("ERRORE in stampa barode da rPI:stampante non trovata{0}barcodeIn: {1}", Environment.NewLine, valore), tipoLog.ERROR);
            }
            return answ;
        }

        protected void txtBarcode_TextChanged(object sender, EventArgs e)
        {
            doChecks();
        }
    }
}