/**
 * Ražības statistikas lapas modulis
 * 
 * Apstrādā ražas izsekošanu un ražas ierakstu pārvaldību.
 * Parāda ražas statistiku pēc kultūraugu sugu un šķirņu ar detalizētiem piegādes ierakstiem.
 * 
 * Funkcijas:
 * - Apskatīt ražas statistiku organizētu pēc kultūraugu sugu un šķirņu
 * - Paplašināmas sugu kartes, kas parāda šķirņu informāciju
 * - Detalizēti ražas ieraksti ar svaru, mitrumu, datumu un lietotāja informāciju
 * - Pievienot jaunus ražas ierakstus ar lauka atlasi un svara aprēķinu
 * - Automātisks neto svara aprēķins (pilns svars - tukšs svars)
 * - Reālā laika pulksteņa displejs ražas ierakstam
 * - Lauka atlase ar šķirņu informācijas displeja
 */

/**
 * Ielādē ražas statistiku no servera
 * Sakārto datus pa sugām un šķirnēm ar piegāžu skaitu un kopsummām
 * Attēlo izvēršamā akordeona formātā
 */
async function loadYieldStats() {
  try {
    const userData = localStorage.getItem("user");
    if (!userData) {
      window.location.href = "index.html";
      return;
    }

    const user = JSON.parse(userData);
    // Iegūst ražas datus, filtrētus pēc saimniecības un lietotāja tiesībām
    const response = await fetch(`http://localhost:3001/api/yield-stats?farm_id=${user.farm_id}&user_id=${user.id}&user_status=${user.status}`);
    
    if (!response.ok) {
      throw new Error('Failed to fetch yield data');
    }

    const species = await response.json();
    const container = document.getElementById('yieldAccordion');

    // Parāda ziņojumu, ja dati neeksistē
    if (species.length === 0 || species.every(s => s.breeds.length === 0)) {
      container.innerHTML = `
        <div class="no-data">
          <h4>No Yield Data Available</h4>
          <p>No harvest records found for your farm yet.</p>
        </div>
      `;
      return;
    }

    let html = '';
    
    // Veido HTML katrai sugai ar tās šķirnēm
    species.forEach((sp, index) => {
      if (sp.breeds.length === 0) return;

      html += `
        <div class="species-card">
          <div class="species-header" onclick="toggleSpecies(${index})">
            <h4>
              <span>🌾 ${sp.name}</span>
              <span id="icon-${index}">▼</span>
            </h4>
          </div>
          <div id="species-${index}" class="collapse">
            ${sp.breeds.map((breed, bIndex) => {
              if (breed.deliveryCount === 0) return '';
              
              return `
                <div class="breed-item" onclick="toggleBreed(${index}, ${bIndex}, ${breed.id})">
                  <div class="breed-name">${breed.name}</div>
                  <small class="text-muted">${breed.deliveryCount} deliveries • ${(breed.totalWeight / 1000).toFixed(1)} tons total</small>
                  
                  <div id="breed-${index}-${bIndex}" class="breed-stats">
                    <div class="stat-item">
                      <span class="stat-label">Total Deliveries:</span>
                      <span class="stat-value">${breed.deliveryCount}</span>
                    </div>
                    <div class="stat-item">
                      <span class="stat-label">Total Weight:</span>
                      <span class="stat-value">${(breed.totalWeight / 1000).toFixed(2)} tons</span>
                    </div>
                    <div class="stat-item">
                      <span class="stat-label">Average Moisture:</span>
                      <span class="stat-value">${breed.avgMoisture}%</span>
                    </div>
                    <div class="stat-item">
                      <span class="stat-label">First Harvest:</span>
                      <span class="stat-value">${new Date(breed.firstHarvest).toLocaleDateString()}</span>
                    </div>
                    <div class="stat-item">
                      <span class="stat-label">Last Harvest:</span>
                      <span class="stat-value">${new Date(breed.lastHarvest).toLocaleDateString()}</span>
                    </div>
                    
                    <div style="margin-top: 15px; padding-top: 15px; border-top: 1px solid #dee2e6;">
                      <h6 class="text-success mb-3">📋 Delivery Records</h6>
                      <div id="records-${index}-${bIndex}" class="records-list">
                        <small class="text-muted">Loading records...</small>
                      </div>
                    </div>
                  </div>
                </div>
              `;
            }).join('')}
          </div>
        </div>
      `;
    });

    container.innerHTML = html;

  } catch (error) {
    console.error('Error loading yield stats:', error);
    document.getElementById('yieldAccordion').innerHTML = `
      <div class="alert alert-danger">
        <h5>Error Loading Data</h5>
        <p>Failed to load yield statistics. Please make sure the server is running.</p>
      </div>
    `;
  }
}

/**
 * Toggle species card expansion
 * Shows/hides breed details for a species
 */
function toggleSpecies(index) {
  const element = document.getElementById(`species-${index}`);
  const icon = document.getElementById(`icon-${index}`);
  
  if (element.classList.contains('show')) {
    element.classList.remove('show');
    icon.textContent = '▼';
  } else {
    element.classList.add('show');
    icon.textContent = '▲';
  }
}

/**
 * Pārslēdz šķirnes detaļu izvēršanu
 * Parāda/slēpj ražas ierakstus konkrētai šķirnei
 * Ielādē ierakstus pirmajā izvēršanas reizē
 */
async function toggleBreed(speciesIndex, breedIndex, breedId) {
  // Novērš notikuma pārmantošanu uz vecākelementu
  event.stopPropagation();
  const element = document.getElementById(`breed-${speciesIndex}-${breedIndex}`);
  
  if (element.classList.contains('show')) {
    element.classList.remove('show');
  } else {
    element.classList.add('show');
    
    // Ielādē ierakstus pirmajā izvēršanas reizē
    const recordsDiv = document.getElementById(`records-${speciesIndex}-${breedIndex}`);
    if (recordsDiv.textContent.includes('Loading')) {
      await loadBreedRecords(breedId, speciesIndex, breedIndex);
    }
  }
}

/**
 * Ielādē detalizētus ražas ierakstus konkrētai šķirnei
 * Attēlo tabulu ar datumu, lauku, svaru, mitrumu un lietotāja informāciju
 */
async function loadBreedRecords(breedId, speciesIndex, breedIndex) {
  try {
    const userData = localStorage.getItem("user");
    if (!userData) return;

    const user = JSON.parse(userData);
    // Iegūst ražas ierakstus, filtrētus pēc šķirnes un lietotāja tiesībām
    const response = await fetch(
      `http://localhost:3001/api/harvest-records/${breedId}?farm_id=${user.farm_id}&user_id=${user.id}&user_status=${user.status}`
    );

    if (!response.ok) throw new Error('Failed to fetch records');

    const records = await response.json();
    const recordsDiv = document.getElementById(`records-${speciesIndex}-${breedIndex}`);

    if (records.length === 0) {
      recordsDiv.innerHTML = '<small class="text-muted">No delivery records</small>';
      return;
    }

    // Veido tabulu ar ražas ierakstiem
    let html = '<table class="table table-sm table-hover">';
    html += '<thead><tr><th>Date</th><th>Field</th><th>Weight (kg)</th><th>Moisture</th><th>Delivered by</th></tr></thead>';
    html += '<tbody>';

    records.forEach(record => {
      const date = new Date(record.time).toLocaleDateString('en-GB');
      const time = new Date(record.time).toLocaleTimeString('en-GB', { hour: '2-digit', minute: '2-digit' });
      html += `
        <tr>
          <td><small>${date} ${time}</small></td>
          <td><small>${record.field_name}</small></td>
          <td><small>${record.weight.toLocaleString()}</small></td>
          <td><small>${record.moisture}%</small></td>
          <td><small>${record.name} ${record.fname}</small></td>
        </tr>
      `;
    });

    html += '</tbody></table>';
    recordsDiv.innerHTML = html;

  } catch (error) {
    console.error('Error loading breed records:', error);
    document.getElementById(`records-${speciesIndex}-${breedIndex}`).innerHTML = 
      '<small class="text-danger">Failed to load records</small>';
  }
}

/**
 * Ielādē pieejamos laukus pašreizējai saimniecībai
 * Aizpilda lauku izvēlni ar lauku nosaukumiem un kultūraugu informāciju
 */
async function loadFields() {
  try {
    const userData = localStorage.getItem("user");
    if (!userData) return;

    const user = JSON.parse(userData);
    const response = await fetch(`http://localhost:3001/api/fields?farm_id=${user.farm_id}`);
    
    if (!response.ok) throw new Error('Failed to fetch fields');

    const fields = await response.json();
    const select = document.getElementById('fieldSelect');
    
    select.innerHTML = '<option value="">Select a field...</option>';
    
    // Aizpilda nolaižamo izvēlni ar lauku informāciju
    fields.forEach(field => {
      const option = document.createElement('option');
      option.value = field.id;
      option.textContent = `${field.name} (${field.species_name} - ${field.breed_name})`;
      option.setAttribute('data-breed-id', field.breed_id);
      option.setAttribute('data-breed-name', field.breed_name);
      option.setAttribute('data-species-name', field.species_name);
      select.appendChild(option);
    });

  } catch (error) {
    console.error('Error loading fields:', error);
  }
}

/**
 * Atjaunina šķirnes informācijas attēlojumu, kad izvēlēts lauks
 * Parāda sugas un šķirnes nosaukumu izvēlētajam laukam
 */
function updateBreedInfo() {
  const select = document.getElementById('fieldSelect');
  const option = select.options[select.selectedIndex];
  const breedInfo = document.getElementById('breedInfo');
  
  if (option.value) {
    const breedName = option.getAttribute('data-breed-name');
    const speciesName = option.getAttribute('data-species-name');
    breedInfo.textContent = `${speciesName} - ${breedName}`;
  } else {
    breedInfo.textContent = '';
  }
}

/**
 * Aprēķina tīro svaru no pilna un tukša svara
 * Tīrais svars = pilnais svars - tukšais svars
 * Automātiski atjaunina tīrā svara lauku
 */
function calculateNetWeight() {
  const fullWeight = parseFloat(document.getElementById('fullWeight').value) || 0;
  const emptyWeight = parseFloat(document.getElementById('emptyWeight').value) || 0;
  const netWeight = fullWeight - emptyWeight;
  
  document.getElementById('netWeight').value = netWeight > 0 ? netWeight.toFixed(1) : '';
}

/**
 * Atjaunina laika attēlojumu ar pašreizējo datumu un laiku
 * Izsaukts lapas ielādes brīdī un ik sekundi reālā laika pulksteņa atjaunināšanai
 */
function updateTimeDisplay() {
  const now = new Date();
  const timeStr = now.toLocaleString('en-GB', {
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit'
  });
  document.getElementById('timeDisplay').value = timeStr;
}

/**
 * Apstrādā ražas formas iesniegšanu
 * Pārbauda datus un nosūta POST pieprasījumu serverim
 * Veiksmīgas darbības gadījumā atjauno ražas statistiku
 */
document.getElementById('harvestForm')?.addEventListener('submit', async (e) => {
  e.preventDefault();

  try {
    const userData = localStorage.getItem("user");
    if (!userData) {
      alert('User not logged in');
      return;
    }

    const user = JSON.parse(userData);
    const fieldId = document.getElementById('fieldSelect').value;
    const fullWeight = parseFloat(document.getElementById('fullWeight').value);
    const emptyWeight = parseFloat(document.getElementById('emptyWeight').value);
    const moisture = parseFloat(document.getElementById('moisture').value);

    if (!fieldId) {
      alert('Please select a field');
      return;
    }

    // Aprēķina un pārbauda tīro svaru
    const netWeight = fullWeight - emptyWeight;
    if (netWeight <= 0) {
      alert('Net weight must be positive (full weight > empty weight)');
      return;
    }

    // Nosūta ražas ierakstu uz serveri
    const response = await fetch('http://localhost:3001/api/harvest', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        field_id: parseInt(fieldId),
        full_weight: fullWeight,
        empty_weight: emptyWeight,
        moisture: moisture,
        user_id: user.id
      })
    });

    const result = await response.json();

    if (result.success) {
      alert(`✅ Harvest record added!\nNet Weight: ${result.data.netWeight} kg\nMoisture: ${result.data.moisture}%`);
      document.getElementById('harvestForm').reset();
      updateTimeDisplay();
      // Pārlādē ražas statistiku, lai parādītu jauno ierakstu
      await loadYieldStats();
    } else {
      alert('❌ Failed to add harvest record: ' + (result.error || 'Unknown error'));
    }

  } catch (error) {
    console.error('Error submitting harvest:', error);
    alert('❌ Failed to add harvest record. Please try again.');
  }
});

/**
 * Inicializē lapu, kad DOM ir gatavs
 * Ielādē laukus, uzstāda reālā laika pulksteni un ielādē ražas statistiku
 */
document.addEventListener('DOMContentLoaded', () => {
  loadFields();
  updateTimeDisplay();
  loadYieldStats();
  
  // Atjaunina laika attēlojumu ik sekundi reālā laika pulksteņa nodrošināšanai
  setInterval(updateTimeDisplay, 1000);
});