from rest_framework import serializers
from Models import workflow
from Models.oportunidad_de_venta_model import ColumnWorkflow
class WorkflowSerializer(serializers.ModelSerializer):
    class Meta:
        model = workflow.Workflow
        fields = ['id', 'nombre', 'created_at', 'updated_at', 'deleted_at']

class CreateWorkflowSerializer(serializers.ModelSerializer):
    nombre = serializers.CharField(
        required=True, 
        help_text="Nombre del workflow"
    )
    columnas = serializers.ListField(
        child=serializers.CharField(max_length=255),
        required=False,
        help_text="Lista de nombres de columnas"
    )
    inicioColumna = serializers.CharField(
        required=False,
        help_text="Nombre de la columna inicial (si no existe se crea automáticamente)"
    )

    class Meta:
        model = workflow.Workflow
        fields = [
            'nombre',
            'columnas',
            'inicioColumna'
        ]

class EditWorkflowSerializer(serializers.ModelSerializer):
    id = serializers.IntegerField(
        required=True, 
        help_text="ID del workflow a editar"
    )
    nombre = serializers.CharField(
        required=False, 
        help_text="Nombre del workflow"
    )
    columnas = serializers.ListField(
        child=serializers.CharField(max_length=255),
        required=False,
        help_text="Lista de nombres de columnas"
    )
    inicioColumna = serializers.CharField(
        required=False,
        help_text="Nombre de la columna inicial (si no existe se crea automáticamente)"
    )
    
    class Meta:
        model = workflow.Workflow
        fields = [
            'id',
            'nombre',
            'columnas',
            'inicioColumna'
        ]
    
    def validate_id(self, value):
        try:
            workflow_obj = workflow.Workflow.objects.get(id=value, deleted_at__isnull=True)
            return value
        except workflow.Workflow.DoesNotExist:
            raise serializers.ValidationError(f"El workflow con ID {value} no existe o ya fue eliminado")

class ColumnWorkflowSerializer(serializers.ModelSerializer):
    class Meta:
        model = ColumnWorkflow
        fields = ['id', 'workflow_id', 'nombre', 'orden', 'created_at', 'updated_at', 'deleted_at']

class WorkflowWithColumnsSerializer(serializers.ModelSerializer):
    columnas = serializers.SerializerMethodField()
    inicioColumna = serializers.SerializerMethodField()
    inicioColumnaId = serializers.SerializerMethodField()

    class Meta:
        model = workflow.Workflow
        fields = ['id', 'nombre', 'created_at', 'updated_at', 'deleted_at', 'columnas', 'inicioColumna', 'inicioColumnaId']

    def get_columnas(self, obj):
        columnas = ColumnWorkflow.objects.filter(workflow_id=obj.id, deleted_at__isnull=True).order_by('orden')
        nombres = [c.nombre for c in columnas if c.nombre]
        return ', '.join(nombres)

    def get_inicioColumna(self, obj):
        columna = ColumnWorkflow.objects.filter(workflow_id=obj.id, deleted_at__isnull=True, orden=1).first()
        return columna.nombre if columna else None

    def get_inicioColumnaId(self, obj):
        columna = ColumnWorkflow.objects.filter(workflow_id=obj.id, deleted_at__isnull=True, orden=1).first()
        return columna.id if columna else None
