using Microsoft.Win32;
using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media.Imaging;

namespace Hotel_Course_Project
{
    /// <summary>
    /// Логика взаимодействия для ClientChangeOrAddPage.xaml
    /// </summary>
    public partial class ClientChangeOrAddPage : Page
    {
        public Client _client;
        public Client addClient;
        public int idClient;
        public byte[] PassportImage;
        public string FilePath;
        public ClientChangeOrAddPage(Client client)
        {
            InitializeComponent();
            DataContext = client;
            _client = client;
            addClient = client;
            if (DataContext != null)
            {

                ClientChangeOrAddBtn.Content = "Изменить данные";
                this.Title = "Информация о клиенте";
                idClient = client.Id;
                ClientDeleteOrRestoreBtn.Visibility = Visibility.Visible;
                if (client.Id_PersStatus == 1)
                {
                    ClientDeleteOrRestoreBtn.Content = "Удалить клиента";
                }
                else
                {
                    ClientDeleteOrRestoreBtn.Content = "Востановить клиента";
                }
            }
            else
            {
                ClientChangeOrAddBtn.Content = "Добавить клиента";
                this.Title = "Окно добавления клиента";
                ClientDeleteOrRestoreBtn.Visibility = Visibility.Collapsed;
            }
        }

        private void ClientChangeOrAddBtn_Click(object sender, RoutedEventArgs e)
        {
            if (DataContext == null)
            {
            }
            if (CLName.Text == null || CFName.Text == null)
            {
                MessageBox.Show("Ключевые поля не были заполнены!");
                return;
            }
            else if (CPassportPhoto == null)
            {
                MessageBox.Show("Фотография паспорта не была загружена!");
                return;
            }
            else
            {
                if (DataContext == null)
                {
                    if (TestAddClient(CLName.Text, CFName.Text, CMName.Text) == true)
                    {
                        DataBase.db.Client.Add(addClient);
                        var lastId = DataBase.db.Client.OrderByDescending(item => item.Id).FirstOrDefault().Id;
                        DataBase.db.Client.SingleOrDefault(item => item.Id == lastId).Passport = PassportImage;
                        DataBase.db.SaveChanges();
                        MessageBox.Show("Клиент добавлен в базу.");
                    }
                    else
                    {
                        MessageBox.Show("Ключевые поля не были заполнены!");
                    }
                    //Client client = new Client()
                    //{
                    //    LName = CLName.Text,
                    //    FName = CFName.Text,
                    //    MName = CMName.Text,
                    //    Passport = PassportImage,
                    //    Id_PersStatus = 1
                    //};
                    //DataBase.db.Client.Add(client);
                    //var lastId = DataBase.db.Client.OrderByDescending(item => item.Id).FirstOrDefault().Id;
                    //DataBase.db.SaveChanges();
                    //MessageBox.Show("Клиент добавлен в базу.");
                }
                else
                {
                    MessageBox.Show("Данные по клиенту изменены.");
                    _client.Passport = PassportImage;
                    DataBase.db.SaveChanges();
                }
                PChanger.MainFrame.GoBack();
            }
        }

        public bool TestAddClient(string LName, string FName, string MName)
        {
            if (LName == null || LName == "" || FName == null || FName == "")
            {
                return false;
            }
            else
            {
                Client client = new Client()
                {
                    LName = LName,
                    FName = FName,
                    MName = MName,
                    Id_PersStatus = 1
                };
                addClient = client;
                return true;
            }
        }

        private void ClientDeleteOrRestoreBtn_Click(object sender, RoutedEventArgs e)
        {
            if (_client.Id_PersStatus == 1)
            {
                _client.Id_PersStatus = 2;
                MessageBox.Show("Статус пользователя изменился на <удалён>");
            }
            else
            {
                _client.Id_PersStatus = 1;
                MessageBox.Show("Статус пользователя восстановлен");
            }
            DataBase.db.SaveChanges();
            PChanger.MainFrame.GoBack();
        }

        private void CPassportPhoto_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            if (openFileDialog.ShowDialog() == true)
            {
                FilePath = openFileDialog.FileName;
                string uriString = $"{FilePath}";
                BitmapImage bitimage = new BitmapImage(new Uri(@uriString));
                CPassportPhoto.Source = bitimage;
                PassportImage = SomeMethods.ConvertBitmapImageToByte(bitimage);
            }
            else
            {
                FilePath = string.Empty;
            }
        }

        private void Page_Loaded(object sender, RoutedEventArgs e)
        {
            if (_client == null || _client.Passport == null)
            {
                CPassportPhoto.Source = new BitmapImage(new Uri("pack://application:,,,/Resources/PersDefaultPhoto.png"));
            }
        }
    }
}
