﻿using System;
using System.Data.SQLite;
using System.Windows;
using System.Windows.Controls;

namespace EcoRideDB {
    public enum StaffRole {
        Manager,
        Mechanic,
        Admin,
        Support
    }

    public partial class AddStaff : UserControl {
        private readonly string connectionStr = "Data Source=EcoRideDB.db;Version=3;";

        public AddStaff() {
            InitializeComponent();
            cmbRole.Items.Clear();
            cmbRole.ItemsSource = Enum.GetValues(typeof(StaffRole));
            cmbRole.SelectedIndex = 0;
        }

        private void AddStaff_Click(object sender, RoutedEventArgs e) {
            string name = txtName.Text.Trim();
            string role = cmbRole.SelectedItem?.ToString() ?? StaffRole.Mechanic.ToString();

            if (string.IsNullOrWhiteSpace(name) || string.IsNullOrWhiteSpace(role)) {
                MessageBox.Show("Name and Role are required.", "Warning", MessageBoxButton.OK, MessageBoxImage.Warning);
                return;
            }

            if (SaveStaff(name, role)) {
                MessageBox.Show("Staff added successfully!", "Success", MessageBoxButton.OK, MessageBoxImage.Information);
                ClearFields();
            } else {
                MessageBox.Show("Failed to add staff.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        private bool SaveStaff(string name, string role) {
            try {
                using (var connection = new SQLiteConnection(connectionStr)) {
                    connection.Open();

                    // Ensure foreign keys are enforced
                    using (var pragma = new SQLiteCommand("PRAGMA foreign_keys = ON;", connection)) {
                        pragma.ExecuteNonQuery();
                    }

                    string query = "INSERT INTO Staff (Name, Role) VALUES (@Name, @Role)";
                    using (var cmd = new SQLiteCommand(query, connection)) {
                        cmd.Parameters.AddWithValue("@Name", name);
                        cmd.Parameters.AddWithValue("@Role", role);

                        return cmd.ExecuteNonQuery() > 0;
                    }
                }
            } catch (Exception ex) {
                MessageBox.Show($"Error saving staff: {ex.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                return false;
            }
        }

        private void ClearFields() {
            txtName.Clear();
            cmbRole.SelectedIndex = 0;
        }
    }
}