using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Электронная_Фармация.Properties;
using System.Text.Json;
using System.Text.Json.Serialization;
using Электронная_Фармация.Classes;
using System.Net.Http;

namespace Электронная_Фармация.HelpForms
{
    public partial class HF_Registration : Form
    {
        public HF_Registration()
        {
            InitializeComponent();
        }

        string login= Settings.Default.stringLogin.ToString();
        string password= Settings.Default.stringPassword.ToString();
        string doWeHaveAToken= Settings.Default.stringToken.ToString();


        private void btnCloseThis_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private async void btnConfirmRegistration_Click(object sender, EventArgs e)
        {
            btnConfirmRegistration.Enabled = false;
            btnCloseThis.Enabled = false;
            this.UseWaitCursor = true;
            string strLogin = txtLogin.Text;
            string strPassword = txtPassword.Text;

            if (strLogin.Length > 0 && strPassword.Length > 0)
            {
                LoginRequest loginRequest = new LoginRequest();
                loginRequest.Username = strLogin.Trim();
                loginRequest.Password = strPassword.Trim();

                var client = new ApiClient();

                try
                {
                    string token = await client.LoginAsync(loginRequest.Username, loginRequest.Password);

                    Settings.Default.stringLogin = strLogin;
                    Settings.Default.stringPassword = strPassword;
                    Settings.Default.stringToken = token;
                    Settings.Default.LocationId = txtLocationId.Text.Trim();
                    Settings.Default.ApiBaseUrl = txtApiUrl.Text.Trim();
                    Settings.Default.Save();

                    ToastNotification.ShowSuccess("Авторизация успешно выполнена");
                    //MessageBox.Show("Данные были сохранены", "Регистрация программы успешно выполнена", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    // Токен автоматически сохраняется в клиенте
                    // и будет использоваться для всех последующих запросов
                    DialogResult = DialogResult.OK;
                    Close();
                }
                catch (UnauthorizedAccessException ex)
                {
                    ToastNotification.ShowError($"Ошибка авторизации: {ex.Message}");
                    //MessageBox.Show($"Ошибка авторизации: {ex.Message}");
                }
                catch (HttpRequestException ex)
                {
                    ToastNotification.ShowError($"Ошибка сети: {ex.Message}");
                    //MessageBox.Show($"Ошибка сети: {ex.Message}");
                }
            }
            else
            {
                UiDialogs.ShowError("Есть незаполненные данные. Регистрация программы не пройдена", "Ошибка ввода", this);
            }
            btnConfirmRegistration.Enabled = true;
            btnCloseThis.Enabled = true;
            this.UseWaitCursor = false;
            
        }

        private void HF_Registration_Load(object sender, EventArgs e)
        {
            UiThemeHelper.ApplyToControlTree(this);
            panel1.BackColor = Elfisa.UI.Theming.ThemeManager.Colors.TitleBarBottom;
            txtLogin.Text = login;
            txtPassword.Text = password;
            txtLocationId.Text = Settings.Default.LocationId ?? string.Empty;
            txtApiUrl.Text = string.IsNullOrWhiteSpace(Settings.Default.ApiBaseUrl)
                ? AppConfig.DefaultApiBaseUrl
                : Settings.Default.ApiBaseUrl;

            if (doWeHaveAToken.Length > 0)
            {
                checkTokenGained.Checked = true;
            }
            else
            {
                checkTokenGained.Checked = false;
            }
        }
    }
}
