using System;

using System.Collections.Generic;
using System.Text;
using System.Globalization;

namespace Wayne.FDCPOSLibrary
{
    static public class FDCConvert
    {
        static public NumberFormatInfo nfi = new NumberFormatInfo();
        static public DateTimeFormatInfo dtfi = new DateTimeFormatInfo();
        static private string decimalSeparator = ",";
        static public string DecimalSeparator 
        {
            get {return decimalSeparator;}
            set
            {
                decimalSeparator=value;
                nfi.NumberDecimalSeparator = decimalSeparator;
            }
        }
        static private string thousandSeparator = "";
        static public string ThousandSeparator
        {
            get {return thousandSeparator;}
            set
            {
                thousandSeparator=value;
                nfi.NumberGroupSeparator = thousandSeparator;
            }
        }

        static public string DateFormat
        {
            get{
                if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
                return Define.DateFormatV03;
            else
                return Define.DateFormatV05;
            }
        }

        static public string ToString(Decimal dec)
        {
            string s = Convert.ToString(dec, nfi);
            return s;
        }

        static public string ToString(Double doubl)
        {
            string s = Convert.ToString(doubl, nfi);
            return s;
        }

        static public string ToString(DateTime datetime)
        {
            dtfi.FullDateTimePattern = FDCConvert.DateFormat;
            if (FDCGlobal.ProtocolVersion == FDCVersion.V0003)
                dtfi.ShortDatePattern = FDCConvert.DateFormat.Substring(0, FDCConvert.DateFormat.IndexOf(' '));
            else
                dtfi.ShortDatePattern = FDCConvert.DateFormat.Substring(0, FDCConvert.DateFormat.IndexOf('T'));
            string s = Convert.ToString(datetime, dtfi);
            if (FDCGlobal.ProtocolVersion > FDCVersion.V0003 && s.IndexOf(' ') > -1)
                s = s.Replace(' ', 'T');
            //if (s.IndexOf(Define.TimeSep) == -1)
            //{
            //    string badTimeSep = s.Substring(s.IndexOf(" ") + 3, 1);
            //    s.Replace(badTimeSep, Define.TimeSep);
            //}
            return s;
        }

        static public Double ToDouble(string str)
        {
            if (str == null || str == "")
                return 0;
            Double d = Convert.ToDouble(str, nfi);
            return d;
        }

        static public Decimal ToDecimal(string str)
        {
            if (str == null || str == "")
                return 0;
            Decimal dec = Convert.ToDecimal(str, nfi);
            return dec;
        }





        static public OverallResult OverallResultToInt(string sOverallResult)
        {
            if (sOverallResult == OverallResult.Success.ToString()) return OverallResult.Success;
            else if (sOverallResult == OverallResult.PartialFailure.ToString()) return OverallResult.PartialFailure;
            else if (sOverallResult == OverallResult.Failure.ToString()) return OverallResult.Failure;
            else if (sOverallResult == OverallResult.DeviceUnavailable.ToString()) return OverallResult.DeviceUnavailable;
            else if (sOverallResult == OverallResult.DeviceDisabled.ToString()) return OverallResult.DeviceDisabled;
            else if (sOverallResult == OverallResult.WrongDeviceNo.ToString()) return OverallResult.WrongDeviceNo;
            else if (sOverallResult == OverallResult.TimeOut.ToString()) return OverallResult.TimeOut;
            else if (sOverallResult == OverallResult.FormatError.ToString()) return OverallResult.FormatError;
            else if (sOverallResult == OverallResult.ParsingError.ToString()) return OverallResult.ParsingError;
            else if (sOverallResult == OverallResult.ValidationError.ToString()) return OverallResult.ValidationError;
            else if (sOverallResult == OverallResult.MissingMandatoryData.ToString()) return OverallResult.MissingMandatoryData;
            else if (sOverallResult == OverallResult.WrongConfiguration.ToString()) return OverallResult.WrongConfiguration;
            else if (sOverallResult == OverallResult.NoData.ToString()) return OverallResult.NoData;
            else if (sOverallResult == OverallResult.NoLogon.ToString()) return OverallResult.NoLogon;
            else if (sOverallResult == OverallResult.AuthentificationError.ToString()) return OverallResult.AuthentificationError;
            return OverallResult.Success;
        }
    }
}