/**
 * Administratora atļauju izsniegšanas modulis
 * 
 * Apstrādā neapstiprinātos darba devēju pieprasijumus
 * Administratoram atļauts:
 *  - Apskatīt neapstiprinātos pieprasījumus
 *  - Apstiprināt vai neapstiprināt tos
 * Veidoja: Edijs Dunavskis
 */

const AdminApprovals = (() => {
  let currentUser = null;

  /**
   * Inicializē administratora atļauju izsniegšanas lapu
   * Ielādē navigācijas joslu un pārbauda autentifikāciju
   */
  const init = async () => {
    // Ielādē navigācijas joslu no app.js
    await HeaderManager.loadHeader('header-container');
    
    // Pārbaud vai lietotājs ir pieslēdzies
    currentUser = JSON.parse(localStorage.getItem('user'));
    if (!currentUser) {
      window.location.href = 'login_lapa.html';
      return;
    }

    // Pārbauda vai lietotājs ir administrators
    if (currentUser.status !== 3) {
      showError('You do not have permission to approve users.');
      setTimeout(() => window.location.href = 'index.html', 2000);
      return;
    }
    
    // Ielādē vēl neapstiprinātos pieprasījumus
    await loadPendingApprovals();
  };

  /**
   * Atsūta vēl neapstiprinātos pieprasījumus no servera
   * Izfiltrē tikai darba devēju pieprasījumus
   */
  const loadPendingApprovals = async () => {
    try {
      const response = await fetch('http://localhost:3001/api/pending-approvals');
      if (!response.ok) throw new Error('Failed to load pending approvals');
      
      const pendingUsers = await response.json();
      displayApprovalsTable(pendingUsers);
      
    } catch (error) {
      console.error('Error loading pending approvals:', error);
      showError('Failed to load pending approvals.');
    }
  };

  /**
   * Izvada neapstiprinātos pieprasījumus tabulas formā
   * Parāda vārdu, e-pastu, lomu, lauksaimniecību, pieprasījuma datumu un pogas
   */
  const displayApprovalsTable = (users) => {
    const tbody = document.getElementById('approvalsTableBody');
    
    if (users.length === 0) {
      tbody.innerHTML = '<tr><td colspan="6" class="text-center text-muted">No pending farm manager approvals</td></tr>';
      return;
    }

    tbody.innerHTML = users.map(user => {
      const registrationDate = new Date(user.registration_date).toLocaleDateString('en-GB');
      
      return `
      <tr>
        <td>${user.name} ${user.fname}</td>
        <td>${user.email}</td>
        <td>
          <span class="badge bg-warning">
            Farm Manager
          </span>
        </td>
        <td>${user.farm_name}</td>
        <td>${registrationDate}</td>
        <td>
          <button class="btn btn-sm btn-success" onclick="AdminApprovals.approveUser(${user.id})">
            Approve
          </button>
          <button class="btn btn-sm btn-danger" onclick="AdminApprovals.declineUser(${user.id})">
            Decline
          </button>
        </td>
      </tr>
    `;
    }).join('');
  };

  /**
   * Apstiprina pieprasījumus
   * Pārmaina no "active=0" uz "active=1" (Aktivizē profilu)
   */
  const approveUser = async (userId) => {
    try {
      const response = await fetch(`http://localhost:3001/api/approve-user/${userId}`, {
        method: 'POST'
      });

      const result = await response.json();

      if (!response.ok) {
        throw new Error(result.error || 'Failed to approve user');
      }

      showSuccess('User approved successfully!');
      // Pārlādē lapu, lai noņemtu no neapstiprinātajiem pieprasījumiem
      await loadPendingApprovals();

    } catch (error) {
      console.error('Error approving user:', error);
      showError(error.message || 'Failed to approve user.');
    }
  };

  /**
   * Noraida pieprasījumu
   * Izdzēš lietotāju no datubāzes
   */
  const declineUser = async (userId) => {
    if (!confirm('Are you sure you want to decline this user?')) {
      return;
    }

    try {
      const response = await fetch(`http://localhost:3001/api/decline-user/${userId}`, {
        method: 'DELETE'
      });

      const result = await response.json();

      if (!response.ok) {
        throw new Error(result.error || 'Failed to decline user');
      }

      showSuccess('User declined successfully!');
      // Pārlādē lapu, lai noņemtu no neapstiprinātajiem pieprasījumiem
      await loadPendingApprovals();

    } catch (error) {
      console.error('Error declining user:', error);
      showError(error.message || 'Failed to decline user.');
    }
  };

  /**
   * Izmet veiksmes paziņojumu
   * Automātiski pazūd pēc 3 sekundēm
   */
  const showSuccess = (message) => {
    // Create temporary alert div
    const alertDiv = document.createElement('div');
    alertDiv.className = 'alert alert-success alert-dismissible fade show';
    alertDiv.innerHTML = `✅ ${message}<button type="button" class="btn-close" data-bs-dismiss="alert"></button>`;
    document.body.insertBefore(alertDiv, document.body.firstChild);
    
    // Automātiski pazūd pēc 3 sekundēm
    setTimeout(() => {
      alertDiv.remove();
    }, 3000);
  };

  /**
   * Parāda noraidošu paziņojumu
   */
  const showError = (message) => {
    // izveido īstermiņa paziņojumu
    const alertDiv = document.createElement('div');
    alertDiv.className = 'alert alert-danger alert-dismissible fade show';
    alertDiv.innerHTML = `❌ ${message}<button type="button" class="btn-close" data-bs-dismiss="alert"></button>`;
    document.body.insertBefore(alertDiv, document.body.firstChild);
  };

  // Publiskais API
  return {
    init,
    approveUser,
    declineUser
  };
})();

// Inicializē, kad "DOM" ir ielādējies
document.addEventListener('DOMContentLoaded', AdminApprovals.init);
