from rest_framework import serializers
from accounts.serializers import UserSerializer
from .models import *
from django.contrib.auth import get_user_model
User = get_user_model()


class CropSerializer(serializers.ModelSerializer):
    class Meta:
        model = Crop
        fields = ('id', 'crop_id', 'crop_name', 'image')


class UserCropPlanSerializer(serializers.ModelSerializer):
    crop = serializers.PrimaryKeyRelatedField(queryset=Crop.objects.all(), write_only=True)
    crop_details = CropSerializer(source='crop', read_only=True)
    user = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())

    class Meta:
        model = UserCropPlan
        fields = ('id', 'user', 'crop', 'crop_details', 'zone', 'crop_plan', 'start_date')


class CropPlanRowSerializer(serializers.ModelSerializer):
    user = serializers.SerializerMethodField()
    zone = serializers.SerializerMethodField()
    crop = serializers.SerializerMethodField()
    row_number = serializers.SerializerMethodField()#newfieldadded

    class Meta:
        model = CropPlanRow
        fields = ('row_number', 'user_crop_plan', 'date', 'day', 'stage', 'action', 'created', 'updated', 'user', 'zone', 'crop')

    def get_user(self, obj):
        return obj.user_crop_plan.user.id if obj.user_crop_plan.user else None

    def get_zone(self, obj):
        return obj.user_crop_plan.zone.id if obj.user_crop_plan.zone else None

    def get_crop(self, obj):
        return obj.user_crop_plan.crop.crop_name if obj.user_crop_plan.crop else None
    def get_row_number(self, obj):
        # Fetch all rows for this plan ordered by id
        rows = CropPlanRow.objects.filter(
            user_crop_plan=obj.user_crop_plan
        ).order_by('id').values_list('id', flat=True)

        try:
            return list(rows).index(obj.id) + 1  # 1-based index
        except ValueError:
            return None
