using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using BankTVUpdater.Consts;
using BankTVUpdater.Logger;
using BankTVUpdater.Exceptions;
using System.Windows;
using BankTVUpdater.AppUpdaterService;
using System.Xml;
using BankTVUpdater.Model.Service;
using BankTVUpdater.Helpers.Config;

namespace BankTVUpdater.Helpers.Service
{
    class ServiceHelper
    {

        public List<SingleFile> GetImageFiles()
        {
            try
            {
                ServiceConfiguration service = ServiceConfiguration.Instance;
                Files files = service.CallGetImageFiles();
                if (files == null)
                {
                    throw new Exception("Wystąpił błąd w trakcie aktualizacji aplikacji Bank TV. Proszę skontaktować się z administratorem systemu.");
                }   //if
                return FilesHelper.ConvertWSFilesToList(files);
            }   //try
            catch (UpdaterConnectionException)
            {
                throw;
            }
            catch (Exception ex)
            {
                MyLogger.Log(ex);
                return null;
            }   //catch
        }

        public List<WeatherIcon> GetWeatherIcons()
        {
            try
            {
                ServiceConfiguration service = ServiceConfiguration.Instance;
                WeatherIcons icons = service.CallGetWeatherIcons();
                if (icons == null)
                {
                    throw new Exception("Wystąpił błąd w trakcie aktualizacji aplikacji Bank TV. Proszę skontaktować się z administratorem systemu.");
                }   //if
                return FilesHelper.ConvertWSWeatherIconsToList(icons);
            }   //try
            catch (UpdaterConnectionException)
            {
                throw;
            }
            catch (Exception ex)
            {
                MyLogger.Log(ex);
                return null;
            }   //catch
        }

        public List<CurrencyItem> GetCurrencyFiles()
        {
            try
            {
                ServiceConfiguration service = ServiceConfiguration.Instance;
                CurrencyItemsList currencyFiles = service.CallGetCurrencies();
                if (currencyFiles == null)
                {
                    throw new Exception("Wystąpił błąd w trakcie aktualizacji aplikacji Wschowa TV. Proszę skontaktować się z administratorem systemu.");
                }   //if
                return FilesHelper.ConvertWSCurrencyItemsToList(currencyFiles);
            }   //try
            catch (UpdaterConnectionException)
            {
                throw;
            }
            catch (Exception ex)
            {
                MyLogger.Log(ex);
                return null;
            }   //catch
        }

        public List<SingleFile> GetVideoFiles()
        {
            try
            {
                ServiceConfiguration service = ServiceConfiguration.Instance;
                Files files = service.CallGetVideoFiles();
                if (files == null)
                {
                    throw new Exception("Wystąpił błąd w trakcie aktualizacji aplikacji Bank TV. Proszę skontaktować się z administratorem systemu.");
                }   //if
                return FilesHelper.ConvertWSFilesToList(files);
            }   //try
            catch (UpdaterConnectionException)
            {
                throw;
            }
            catch (Exception ex)
            {
                MyLogger.Log(ex);
                return null;
            }   //catch
        }

        public List<SingleNews> GetNewsFiles()
        {
            try
            {
                ServiceConfiguration service = ServiceConfiguration.Instance;
                News news = service.CallGetNews();
                if (news == null)
                {
                    throw new Exception("Wystąpił błąd w trakcie aktualizacji aplikacji Bank TV. Proszę skontaktować się z administratorem systemu.");
                }   //if
                return FilesHelper.ConvertWSNewsFilesToList(news);
            }   //try
            catch (UpdaterConnectionException)
            {
                throw;
            }
            catch (Exception ex)
            {
                MyLogger.Log(ex);
                return null;
            }   //catch
        }

        public List<SingleFile> GetFlashFiles()
        {
            try
            {
                ServiceConfiguration service = ServiceConfiguration.Instance;
                Files files = service.CallGetFlashFiles();
                if (files == null)
                {
                    throw new Exception("Wystąpił błąd w trakcie aktualizacji aplikacji Wschowa TV. Proszę skontaktować się z administratorem systemu.");
                }   //if
                return FilesHelper.ConvertWSFilesToList(files);
            }   //try
            catch (UpdaterConnectionException)
            {
                throw;
            }
            catch (Exception ex)
            {
                MyLogger.Log(ex);
                return null;
            }   //catch
        }

        public string GetAppConfiguration()
        {
            try
            {
                ServiceConfiguration service = ServiceConfiguration.Instance;
                return service.CallGetAppConfiguration();
            }   //try
            catch (UpdaterConnectionException)
            {
                throw;
            }
            catch (Exception ex)
            {
                MyLogger.Log(ex);
                return null;
            }   //catch
        }

        public string GetAppConfigurationForDepartments(string param)
        {
            try
            {
                ServiceConfiguration service = ServiceConfiguration.Instance;
                return service.CallGetAppForDepartmentConfiguration(param);
            }   //try
            catch (UpdaterConnectionException)
            {
                throw;
            }
            catch (Exception ex)
            {
                MyLogger.Log(ex);
                return null;
            }   //catch
        }

        public Departments GetDepartments()
        {
            try
            {
                ServiceConfiguration service = ServiceConfiguration.Instance;
                return service.CallGetDepartments();
            }   //try
            catch (UpdaterConnectionException)
            {
                throw;
            }
            catch (Exception ex)
            {
                MyLogger.Log(ex);
                return null;
            }   //catch
        }

        public string GetCurrencyConfiguration()
        {
            try
            {
                ServiceConfiguration service = ServiceConfiguration.Instance;
                return service.CallGetCurrenciesConfigFile();
            }   //try
            catch (UpdaterConnectionException)
            {
                throw;
            }
            catch (Exception ex)
            {
                MyLogger.Log(ex);
                return null;
            }   //catch
        }

        public bool IsUpdaterUpdateNeeded(int updaterVersion)
        {
            try
            {
                ServiceConfiguration service = ServiceConfiguration.Instance;
                return service.CallAppUpdaterNeedsUpdate(updaterVersion);
            }   //try
            catch (UpdaterConnectionException)
            {
                throw;
            }
            catch (Exception)
            {
                throw;
            }   //catch
        }

        public bool IsAppUpdateNeeded()
        {
            try
            {
                int version = XmlConfigHelper.GetCurrentVersion();
                ServiceConfiguration service = ServiceConfiguration.Instance;
                return service.CallAppNeedsUpdate(version);
            }   //try
            catch (UpdaterConnectionException)
            {
                throw;
            }
            catch (Exception)
            {
                throw;
            }   //catch
        }

        public List<string> GetBottomBarNews()
        {
            try
            {
                ServiceConfiguration service = ServiceConfiguration.Instance;
                BankTVUpdater.AppUpdaterService.BottomBarNews news = service.CallGetBottomBarNews();
                if (news == null)
                {
                    throw new Exception("Wystąpił błąd w trakcie aktualizacji aplikacji Bank TV. Proszę skontaktować się z administratorem systemu.");
                }   //if
                return FilesHelper.ConvertWSBottomBarNewsToList(news);
            }   //try
            catch (UpdaterConnectionException)
            {
                throw;
            }
            catch (Exception ex)
            {
                MyLogger.Log(ex);
                return null;
            }   //catch
        }

    }
}
