/**
 * API Route: Record harvest event
 * POST /api/transport/harvest
 */

import type { NextApiRequest, NextApiResponse } from 'next';
import { getTransportChain } from '../../../lib/transport/tracker';
import { HarvestEvent, TransportLocation, TransportMethod } from '../../../lib/transport/types';

export default async function handler(
  req: NextApiRequest,
  res: NextApiResponse
) {
  if (req.method !== 'POST') {
    return res.status(405).json({ success: false, error: 'Method not allowed' });
  }

  try {
    const {
      plantIds,
      harvestBatchId,
      harvestType,
      produceType,
      grossWeight,
      netWeight,
      weightUnit,
      itemCount,
      qualityGrade,
      packagingType,
      temperatureRequired,
      shelfLifeHours,
      fromLocation,
      toLocation,
      transportMethod,
      senderId,
      receiverId,
      distanceKm,
      durationMinutes,
      seedsSaved,
      seedBatchIdCreated,
      notes
    } = req.body;

    // Validate required fields
    if (!plantIds || !harvestBatchId || !harvestType || !produceType || !grossWeight || !netWeight || !fromLocation || !toLocation || !senderId || !receiverId) {
      return res.status(400).json({
        success: false,
        error: 'Missing required fields: plantIds, harvestBatchId, harvestType, produceType, grossWeight, netWeight, fromLocation, toLocation, senderId, receiverId'
      });
    }

    const transportChain = getTransportChain();

    const event: HarvestEvent = {
      id: `harvest-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
      timestamp: new Date().toISOString(),
      eventType: 'harvest',
      plantIds: Array.isArray(plantIds) ? plantIds : [plantIds],
      harvestBatchId,
      harvestType,
      produceType,
      grossWeight,
      netWeight,
      weightUnit: weightUnit || 'kg',
      itemCount,
      qualityGrade,
      packagingType: packagingType || 'bulk',
      temperatureRequired: temperatureRequired || { min: 2, max: 8, optimal: 4, unit: 'celsius' },
      shelfLifeHours: shelfLifeHours || 168,
      fromLocation: fromLocation as TransportLocation,
      toLocation: toLocation as TransportLocation,
      distanceKm: distanceKm || 0,
      durationMinutes: durationMinutes || 0,
      transportMethod: (transportMethod as TransportMethod) || 'walking',
      carbonFootprintKg: 0,
      senderId,
      receiverId,
      status: 'verified',
      seedsSaved: seedsSaved || false,
      seedBatchIdCreated,
      notes
    };

    const block = transportChain.recordEvent(event);

    res.status(201).json({
      success: true,
      data: {
        event,
        block: {
          index: block.index,
          hash: block.hash,
          timestamp: block.timestamp,
          cumulativeCarbonKg: block.cumulativeCarbonKg,
          cumulativeFoodMiles: block.cumulativeFoodMiles
        }
      }
    });
  } catch (error: any) {
    console.error('Error recording harvest event:', error);
    res.status(500).json({ success: false, error: error.message || 'Internal server error' });
  }
}
