/**
 * Lauksaimniecības zemes (Turpmāk: Lauku) pārvaldes modulis
 * 
 * Apstrādā visas lauku pārvaldības darbības
 * 
 * Funkcijas:
 *  - Apskatīt visus konkrētās lauksaimniecības laukus
 *  - Pievienot jaunus laukus
 *  - Reģidēt eksistējošos laukus
 *  - Automātiska šķirņu "dropdown" izvēlne
 *  - Dzēst laukus
 * Veidoja: Edijs Dunavskis
 */

const FieldsManager = (() => {
  let currentUser = null;
  let editModal = null;
  let breeds = [];

  /**
   * Inicializē lauku pārvaldības lapu
   * Ielādē galveni, pārbauda autentifikāciju un iestatīt notikumu klausītājus
   */
  const init = async () => {

    await HeaderManager.loadHeader('header-container');
    
    // Pārbauda autentifikāciju - pārsūta uz login, ja nav pieslēgies
    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 manage fields.');
      setTimeout(() => window.location.href = 'index.html', 2000);
      return;
    }
    
    // Inicializē Bootstrap modāli lauku rediģēšanai
    editModal = new bootstrap.Modal(document.getElementById('editFieldModal'));
    
    // Ielādē kulturaugu šķirnes "dropdown" izvēlnei
    await loadBreeds();
    
    // Ielādē un parāda visus laukus šai lauksaimniecībai
    await loadFields();
    
    // Iestatīt formas iesniegšanas apstrādātājus
    document.getElementById('addFieldForm').addEventListener('submit', handleAddField);
    document.getElementById('editFieldForm').addEventListener('submit', (e) => {
      e.preventDefault();
      saveEdit();
    });
  };

  /**
   * Nosūta visas pieejamās kulturaugu šķirnes no servera
   * Papildina šķirņu "dropdown" izvēlnes
   */
  const loadBreeds = async () => {
    try {
      const response = await fetch('http://localhost:3001/api/crop-breeds');
      if (!response.ok) throw new Error('Failed to load breeds');
      
      const breedsData = await response.json();
      
      // Iegūst visas sugas, lai varētu pievienot sugas nosaukumus šķirnēm
      const speciesResponse = await fetch('http://localhost:3001/api/crop-species');
      if (!speciesResponse.ok) throw new Error('Failed to load species');
      
      const speciesData = await speciesResponse.json();
      
      // Izveido karti no sugas ID uz sugas nosaukumu
      const speciesMap = {};
      speciesData.forEach(species => {
        speciesMap[species.id] = species.name;
      });
      
      // Pievieno sugas nosaukumu katrai šķirnei
      breeds = breedsData.map(breed => ({
        ...breed,
        species_name: speciesMap[breed.species_id] || 'Unknown'
      }));
      
      populateBreedSelects();
      
    } catch (error) {
      console.error('Error loading breeds:', error);
      showError('Failed to load crop breeds.');
    }
  };

  /**
   * Papildina gan pievienošanas, gan rediģēšanas formu "dropdown" izvēlnes
   * Atjaunina abas formas "dropdown" izvēlnes ar sugas un šķirnes informāciju
   */
  const populateBreedSelects = () => {
    const selects = ['breedId', 'editBreedId'];
    selects.forEach(selectId => {
      const select = document.getElementById(selectId);
      if (select) {
        select.innerHTML = '<option value="">Select a breed...</option>';
        breeds.forEach(breed => {
          const option = document.createElement('option');
          option.value = breed.id;
          // Parāda gan sugu, gan šķirni
          option.textContent = `${breed.species_name} - ${breed.name}`;
          select.appendChild(option);
        });
      }
    });
  };

  /**
   * Nosūta visus laukus konkrētajai lauksaimniecībai no servera
   */
  const loadFields = async () => {
    try {
      const response = await fetch(`http://localhost:3001/api/fields?farm_id=${currentUser.farm_id}`);
      if (!response.ok) throw new Error('Failed to load fields');
      
      const fields = await response.json();
      displayFieldsTable(fields);
      
    } catch (error) {
      console.error('Error loading fields:', error);
      showError('Failed to load fields.');
    }
  };

  /**
   * Parāda laukus tabulas formātā
   * Parāda lauka nosaukumu, platību, sugu, šķirni un darbības pogas (rediģēt/dzēst)
   */
  const displayFieldsTable = (fields) => {
    const tbody = document.getElementById('fieldsTableBody');
    
    if (fields.length === 0) {
      tbody.innerHTML = '<tr><td colspan="5" class="text-center text-muted">No fields found</td></tr>';
      return;
    }

    tbody.innerHTML = fields.map(field => {
      // Parāda gan sugu, gan šķirni
      const speciesName = field.species_name || 'Unknown';
      const breedName = field.breed_name || 'Unknown';
      return `
      <tr>
        <td>${field.name}</td>
        <td>${field.area}</td>
        <td>${speciesName}</td>
        <td>${breedName}</td>
        <td>
          <button class="btn btn-sm btn-warning" onclick="FieldsManager.openEditModal(${field.id}, '${field.name}', ${field.area}, ${field.breed_id})">
            Edit
          </button>
          <button class="btn btn-sm btn-danger" onclick="FieldsManager.deleteField(${field.id})">
            Delete
          </button>
        </td>
      </tr>
    `;
    }).join('');
  };

  /**
   * Apstrādā jauna lauka pievienošanu
   * Pārbauda ievadi un nosūta POST pieprasījumu uz serveri
   */
  const handleAddField = async (e) => {
    e.preventDefault();
    
    const name = document.getElementById('fieldName').value.trim();
    const area = parseFloat(document.getElementById('fieldArea').value);
    const breedId = parseInt(document.getElementById('breedId').value);

    if (!name || !area || !breedId) {
      showError('All fields are required.');
      return;
    }

    try {
      const response = await fetch('http://localhost:3001/api/fields', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({
          name,
          area,
          breed_id: breedId,
          farm_id: currentUser.farm_id
        })
      });

      if (!response.ok) {
        const errorData = await response.json();
        throw new Error(errorData.error || 'Failed to add field');
      }

      await response.json();
      showSuccess('Field added successfully!');
      document.getElementById('addFieldForm').reset();
      
      // Pārlādē lauku tabulu, lai parādītu jauno lauku
      await loadFields();

    } catch (error) {
      console.error('Error adding field:', error);
      showError(error.message || 'Failed to add field.');
    }
  };

  /**
   * Atver rediģēšanas moduli ar iepriekš aizpildītiem lauka datiem
   */
  const openEditModal = (id, name, area, breedId) => {
    document.getElementById('editFieldId').value = id;
    document.getElementById('editFieldName').value = name;
    document.getElementById('editFieldArea').value = area;
    document.getElementById('editBreedId').value = breedId;
    editModal.show();
  };

  /**
   * Saglabā rediģētos lauka datus
   * Pārbauda ievadi un nosūta PUT pieprasījumu uz serveri
   */
  const saveEdit = async () => {
    const id = document.getElementById('editFieldId').value;
    const name = document.getElementById('editFieldName').value.trim();
    const area = parseFloat(document.getElementById('editFieldArea').value);
    const breedId = parseInt(document.getElementById('editBreedId').value);

    if (!name || !area || !breedId) {
      showError('All fields are required.');
      return;
    }

    try {
      const response = await fetch(`http://localhost:3001/api/fields/${id}`, {
        method: 'PUT',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({
          name,
          area,
          breed_id: breedId
        })
      });

      if (!response.ok) {
        const errorData = await response.json();
        throw new Error(errorData.error || 'Failed to update field');
      }

      await response.json();
      showSuccess('Field updated successfully!');
      editModal.hide();
      
      // Pārlādē lauku tabulu, lai parādītu atjaunināto lauku
      await loadFields();

    } catch (error) {
      console.error('Error updating field:', error);
      showError(error.message || 'Failed to update field.');
    }
  };

  /**
   * Dzēš lauku pēc apstiprinājuma
   * Nosūta DELETE pieprasījumu uz serveri
   */
  const deleteField = async (id) => {
    if (!confirm('Are you sure you want to delete this field?')) {
      return;
    }

    try {
      const response = await fetch(`http://localhost:3001/api/fields/${id}`, {
        method: 'DELETE'
      });

      if (!response.ok) {
        const errorData = await response.json();
        throw new Error(errorData.error || 'Failed to delete field');
      }

      await response.json();
      showSuccess('Field deleted successfully!');
      await loadFields();

    } catch (error) {
      console.error('Error deleting field:', error);
      showError(error.message || 'Failed to delete field.');
    }
  };

  /**
   * Parāda veiksmes paziņojumu lietotājam
   * Automātiski pazūd pēc 3 sekundēm
   */
  const showSuccess = (message) => {
    const successDiv = document.getElementById('successMessage');
    successDiv.textContent = '✅ ' + message;
    successDiv.style.display = 'block';
    document.getElementById('errorMessage').style.display = 'none';
    setTimeout(() => {
      successDiv.style.display = 'none';
    }, 3000);
  };

  /**
   * Parāda kļūdas paziņojumu lietotājam
   */
  const showError = (message) => {
    const errorDiv = document.getElementById('errorMessage');
    errorDiv.textContent = '❌ ' + message;
    errorDiv.style.display = 'block';
    document.getElementById('successMessage').style.display = 'none';
  };

  // Publiskais API
  return {
    init,
    deleteField,
    openEditModal,
    saveEdit
  };
})();

// Inicializē, kad "DOM" ir gatavs
document.addEventListener('DOMContentLoaded', FieldsManager.init);
