using System;
using System.Windows;
using Npgsql;

namespace ych
{
    public partial class LoginWindow : Window
    {
        // Строка подключения к новой базе dbwork
        private readonly string _connString =
            "Host=edu-pg.itiscaf.ru;Port=5432;Database=dbwork;" +
            "Username=gaukov_dp;Password=4K62ebY72%h;";

        public string UserRole { get; private set; }

        public LoginWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            string loginInput = LoginBox.Text.Trim();
            string passInput = PassBox.Password;

            if (string.IsNullOrEmpty(loginInput) || string.IsNullOrEmpty(passInput))
            {
                ShowError("Заполните все поля");
                return;
            }

            try
            {
                using (var conn = new NpgsqlConnection(_connString))
                {
                    conn.Open();

                    // Запрос к таблице users в схеме gaukov_dp
                    string sql = "SELECT role FROM gaukov_dp.users WHERE login = @l AND password = @p";

                    using (var cmd = new NpgsqlCommand(sql, conn))
                    {
                        cmd.Parameters.AddWithValue("l", loginInput);
                        cmd.Parameters.AddWithValue("p", passInput);

                        var result = cmd.ExecuteScalar();

                        if (result != null && result != DBNull.Value)
                        {
                            // Успешный вход
                            UserRole = result.ToString();

                            // Логируем успешный вход
                            LogToDatabase(loginInput, UserRole, "Успешно");

                            DialogResult = true;
                            Close();
                        }
                        else
                        {
                            // Неверные данные
                            ShowError("Неверный логин или пароль");
                            LogToDatabase(loginInput, "unknown", "Ошибка входа");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ошибка БД: " + ex.Message, "Внимание");
            }
        }

        private void ShowError(string msg)
        {
            ErrorText.Text = msg;
            ErrorText.Visibility = Visibility.Visible;
            PassBox.Clear();
            PassBox.Focus();
        }

        private void LogToDatabase(string login, string role, string status)
        {
            try
            {
                using (var conn = new NpgsqlConnection(_connString))
                {
                    conn.Open();

                    // Исправлены имена параметров: @r и @s должны совпадать с AddWithValue
                    string sqlLog = "INSERT INTO gaukov_dp.login_logs (user_role, status, login_time) VALUES (@r, @s, NOW())";

                    using (var cmd = new NpgsqlCommand(sqlLog, conn))
                    {
                        cmd.Parameters.AddWithValue("r", role);
                        cmd.Parameters.AddWithValue("s", status);
                        cmd.ExecuteNonQuery();
                    }
                }
            }
            catch
            {
                // Если лог не запишется (например, нет прав или таблицы), 
                // мы просто игнорируем ошибку, чтобы не ломать вход пользователю
            }
        }
    }
}