/**
 * Darba devēja atļauju izsniegšanas modulis
 * 
 * Apstrādā darba devēju atļaujas izsniegšanas procesu
 * Atļauj darba devējam:
 *  - Apskatīt neapstiprinātos pieprasījumus
 *  - Apstirpināt/neapstiprināt pieprasījumus
 *  - Izvadīt darbinieku informāciju
 * Veidoja: Edijs Dunavskis
 */

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

  /**
   * Inicializē darba devēju atļauju izsniegšanas lapu
   * Ielādē neapstiprinātos pieprasījumus
   */
  const init = async () => {
    await HeaderManager.loadHeader('header-container');
    
    // Pārbauda 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 darba devējs
    if (currentUser.status !== 2) {
      showError('You do not have permission to approve workers.');
      setTimeout(() => window.location.href = 'index.html', 2000);
      return;
    }
    
    // Ielādē un parāda neapstiprinātos pieprasījumus tajai lauksaimniecībai
    await loadPendingApprovals();
  };

  /**
   * Nosūta nepastiprinātos pieprasījumus no servera
   * Filtrē neapstiprinātos darbiniekus
   * Rāda tikai konkrētās lauksiamniecības darbiniekus
   */
  const loadPendingApprovals = async () => {
    try {
      const response = await fetch(`http://localhost:3001/api/pending-registrations?farm_id=${currentUser.farm_id}`);
      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ātā
   * Parāda vārdu, e-pastu, reģistrēšanās datumu un pogas
   */
  const displayApprovalsTable = (users) => {
    const tbody = document.getElementById('approvalsTableBody');
    
    if (users.length === 0) {
      tbody.innerHTML = '<tr><td colspan="4" class="text-center text-muted">No pending worker 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>${registrationDate}</td>
        <td>
          <button class="btn btn-sm btn-success" onclick="FarmManagerApprovals.approveUser(${user.id})">
            Approve
          </button>
          <button class="btn btn-sm btn-danger" onclick="FarmManagerApprovals.declineUser(${user.id})">
            Decline
          </button>
        </td>
      </tr>
    `;
    }).join('');
  };

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

      const result = await response.json();

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

      showSuccess('Worker approved successfully!');
      // Pārlādē tabulu, lai noņemtu apstiprināto darbinieku
      await loadPendingApprovals();

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

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

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

      const result = await response.json();

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

      showSuccess('Worker declined successfully!');
      // Pārlādē tabulu, lai noņemtu noraidīto darbinieku
      await loadPendingApprovals();

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

  /**
   * Izvada veiksmes paziņojumu
   * Automātiski pazūd 3 sekundēs
   */
  const showSuccess = (message) => {
    // izveido īslaicīgu paziņojumu
    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);
    
    // Auto-remove after 3 seconds
    setTimeout(() => {
      alertDiv.remove();
    }, 3000);
  };

  /**
   * Izvada kļūdas paziņojumu
   */
  const showError = (message) => {
    // Izveido īslaicīgu 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', FarmManagerApprovals.init);
