/**
 * Kultūraugu pārvaldības modulis
 * 
 * Apstrādā kultūraugu sugu un šķirņu pārvaldību darba devējiem (status=2).
 * Atļauj pievienot un dzēst kultūraugu sugas un šķirnes.
 * 
 * Funkcijas:
 * - Apskatīt visas kultūraugu sugas tabulā
 * - Pievienot jaunas kultūraugu sugas
 * - Dzēst kultūraugu sugas
 * - Apskatīt visas kultūraugu šķirnes tabulā
 * - Pievienot jaunas kultūraugu šķirnes ar sugu izvēli
 * - Dzēst kultūraugu šķirnes
 * - Atsevišķi veiksmes/kļūdu paziņojumi katrai cilnei
 * 
 * Lietotāju lomas:
 * - Status 1: Darbinieks (bez piekļuves)
 * - Status 2: Darba devējs (pilna piekļuve)
 * - Status 3: Administrators (bez piekļuves)
 */

const PlantsManager = (() => {
  let currentUser = null;      // Pašreizējais pieslēgtais lietotājs
  let species = [];            // Pieejamo kultūraugu sugu masīvs
  let breeds = [];             // Pieejamo kultūraugu šķirņu masīvs

  /**
   * Inicializē kultūraugu 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;
    }

    // Tikai darba devēji (status=2) var pārvaldīt kultūraugus
    if (currentUser.status !== 2) {
      showError('You dont have acces to crop managment.');
      setTimeout(() => window.location.href = 'index.html', 2000);
      return;
    }
    
    // Ielādē sugu un šķirņu datus
    await loadSpecies();
    await loadBreeds();
    
    // Iestatīt formu iesniegšanas apstrādātājus
    document.getElementById('addSpeciesForm').addEventListener('submit', handleAddSpecies);
    document.getElementById('addBreedForm').addEventListener('submit', handleAddBreed);
  };

  /**
   * Nosūta visas kultūraugu sugas no servera
   * Parāda tās sugu tabulā
   */
  const loadSpecies = async () => {
    try {
      const response = await fetch('http://localhost:3001/api/crop-species');
      if (!response.ok) throw new Error('Error loading species');
      
      species = await response.json();
      displaySpeciesTable(species);
      populateSpeciesSelect();
      
    } catch (error) {
      console.error('Error loading species:', error);
      showSpeciesError('Error loading species.');
    }
  };

  /**
   * Nosūta visas kultūraugu šķirnes no servera
   * Parāda tās šķirņu tabulā
   */
  const loadBreeds = async () => {
    try {
      const response = await fetch('http://localhost:3001/api/crop-breeds');
      if (!response.ok) throw new Error('Error loading breeds');
      
      breeds = await response.json();
      displayBreedsTable(breeds);
      
    } catch (error) {
      console.error('Error loading breeds:', error);
      showBreedError('Error loading breeds.');
    }
  };

  /**
   * Papildina sugu "dropdown" izvēlni šķirņu formā
   * Atļauj lietotājam izvēlēties, kurai sugai pieder šķirne
   */
  const populateSpeciesSelect = () => {
    const select = document.getElementById('breedSpecies');
    select.innerHTML = '<option value="">Choose species</option>';
    species.forEach(sp => {
      const option = document.createElement('option');
      option.value = sp.id;
      option.textContent = sp.name;
      select.appendChild(option);
    });
  };

  /**
   * Parāda sugas tabulas formātā
   * Parāda sugas nosaukumu un dzēšanas pogu
   */
  const displaySpeciesTable = (speciesList) => {
    const tbody = document.getElementById('speciesTableBody');
    
    if (speciesList.length === 0) {
      tbody.innerHTML = '<tr><td colspan="2" class="text-center text-muted">Couldnt find species</td></tr>';
      return;
    }

    tbody.innerHTML = speciesList.map(sp => `
      <tr>
        <td>${sp.name}</td>
        <td>
          <button class="btn btn-sm btn-danger" onclick="PlantsManager.deleteSpecies(${sp.id})">
            Delete
          </button>
        </td>
      </tr>
    `).join('');
  };

  /**
   * Parāda šķirnes tabulas formātā
   * Parāda šķirnes nosaukumu, mātes sugu un dzēšanas pogu
   */
  const displayBreedsTable = (breedsList) => {
    const tbody = document.getElementById('breedsTableBody');
    
    if (breedsList.length === 0) {
      tbody.innerHTML = '<tr><td colspan="3" class="text-center text-muted">Couldnt find the breed</td></tr>';
      return;
    }

    tbody.innerHTML = breedsList.map(breed => {
      const speciesName = species.find(s => s.id === breed.species_id)?.name || 'Unknown';
      return `
      <tr>
        <td>${breed.name}</td>
        <td>${speciesName}</td>
        <td>
          <button class="btn btn-sm btn-danger" onclick="PlantsManager.deleteBreed(${breed.id})">
            Dzēst
          </button>
        </td>
      </tr>
    `;
    }).join('');
  };

  /**
   * Apstrādā jaunas sugas pievienošanu
   * Pārbauda ievadi un nosūta POST pieprasījumu uz serveri
   */
  const handleAddSpecies = async (e) => {
    e.preventDefault();
    
    const name = document.getElementById('speciesName').value.trim();

    if (!name) {
      showSpeciesError('Species name is mendatory.');
      return;
    }

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

      if (!response.ok) {
        const errorData = await response.json();
        throw new Error(errorData.error || 'Error adding species');
      }

      await response.json();
      showSpeciesSuccess('Species added successfully!');
      document.getElementById('addSpeciesForm').reset();
      
      // Pārlādē sugas, lai parādītu jauno ierakstu
      await loadSpecies();

    } catch (error) {
      console.error('Error adding species:', error);
      showSpeciesError(error.message || 'Error adding species.');
    }
  };

  /**
   * Apstrādā jaunas šķirnes pievienošanu
   * Pārbauda ievadi un nosūta POST pieprasījumu uz serveri
   */
  const handleAddBreed = async (e) => {
    e.preventDefault();
    
    const name = document.getElementById('breedName').value.trim();
    const speciesId = parseInt(document.getElementById('breedSpecies').value);

    if (!name || !speciesId) {
      showBreedError('All fields are mendatory.');
      return;
    }

    try {
      const response = await fetch('http://localhost:3001/api/crop-breeds', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({
          name,
          species_id: speciesId
        })
      });

      if (!response.ok) {
        const errorData = await response.json();
        throw new Error(errorData.error || 'Error adding breed');
      }

      await response.json();
      showBreedSuccess('Breed added succesfully!');
      document.getElementById('addBreedForm').reset();
      
      // Pārlādē šķirnes, lai parādītu jauno ierakstu
      await loadBreeds();

    } catch (error) {
      console.error('Error adding breed:', error);
      showBreedError(error.message || 'Error adding breed.');
    }
  };

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

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

      if (!response.ok) {
        const errorData = await response.json();
        throw new Error(errorData.error || 'Error deleting species');
      }

      await response.json();
      showSpeciesSuccess('Species deleted succesfully!');
      await loadSpecies();

    } catch (error) {
      console.error('Error deleting species:', error);
      showSpeciesError(error.message || 'Error deleting species.');
    }
  };

  /**
   * Dzēš šķirni pēc apstiprinājuma
   * Nosūta DELETE pieprasījumu uz serveri
   */
  const deleteBreed = async (id) => {
    if (!confirm('Do you really want to delete this breed?')) {
      return;
    }

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

      if (!response.ok) {
        const errorData = await response.json();
        throw new Error(errorData.error || 'Error deleting breed');
      }

      await response.json();
      showBreedSuccess('Breed deleted succesfully!');
      await loadBreeds();

    } catch (error) {
      console.error('Error deleting breed:', error);
      showBreedError(error.message || 'Error deleting breed.');
    }
  };

  /**
   * Parāda veiksmes paziņojumu sugu operācijām
   * Automātiski pazūd pēc 3 sekundēm
   */
  const showSpeciesSuccess = (message) => {
    const successDiv = document.getElementById('speciesSuccessMessage');
    if (successDiv) {
      successDiv.textContent = '✅ ' + message;
      successDiv.style.display = 'block';
      const errorDiv = document.getElementById('speciesErrorMessage');
      if (errorDiv) errorDiv.style.display = 'none';
      setTimeout(() => {
        successDiv.style.display = 'none';
      }, 3000);
    }
  };

  /**
   * Parāda kļūdas paziņojumu sugu operācijām
   */
  const showSpeciesError = (message) => {
    const errorDiv = document.getElementById('speciesErrorMessage');
    if (errorDiv) {
      errorDiv.textContent = '❌ ' + message;
      errorDiv.style.display = 'block';
      const successDiv = document.getElementById('speciesSuccessMessage');
      if (successDiv) successDiv.style.display = 'none';
    }
  };

  /**
   * Parāda veiksmes paziņojumu šķirņu operācijām
   * Automātiski pazūd pēc 3 sekundēm
   */
  const showBreedSuccess = (message) => {
    const successDiv = document.getElementById('breedSuccessMessage');
    if (successDiv) {
      successDiv.textContent = '✅ ' + message;
      successDiv.style.display = 'block';
      const errorDiv = document.getElementById('breedErrorMessage');
      if (errorDiv) errorDiv.style.display = 'none';
      setTimeout(() => {
        successDiv.style.display = 'none';
      }, 3000);
    }
  };

  /**
   * Parāda kļūdas paziņojumu šķirņu operācijām
   */
  const showBreedError = (message) => {
    const errorDiv = document.getElementById('breedErrorMessage');
    if (errorDiv) {
      errorDiv.textContent = '❌ ' + message;
      errorDiv.style.display = 'block';
      const successDiv = document.getElementById('breedSuccessMessage');
      if (successDiv) successDiv.style.display = 'none';
    }
  };

  /**
   * Parāda vispārēju kļūdas paziņojumu
   */
  const showError = (message) => {
    alert('❌ ' + message);
  };

  // Publiskais API - izpauž metodes, kas jāizsauc no HTML
  return {
    init,
    deleteSpecies,
    deleteBreed
  };
})();

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