from rest_framework import serializers
from .models import ChatMessage, CredentialSlot

class ChatMessageSerializer(serializers.ModelSerializer):
    class Meta:
        model = ChatMessage
        fields = ['id', 'user', 'bot', 'message', 'timestamp', 'sender', 'message_type', 'message_audio_url', 'message_video_url']
        read_only_fields = ['id', 'timestamp', 'sender']


class CredentialSlotSerializer(serializers.ModelSerializer):
    """通用凭据槽位序列化器（明文存储，脱敏由 view 层完成）。

    设计动机（per CONTEXT.md D-Serializer）：
    - 脱敏放 view 层不放 serializer：PUT 路径需要明文走 is_valid + save，serializer
      不应承担"既要明文又要脱敏"的双重责任。
    - app_id / access_token 在模型层 blank=True, default=''，对应 serializer 配
      allow_blank=True, allow_null=False, required=False；既允许空字符串覆写、又
      拒绝 None；缺字段时由 ModelSerializer 默认行为（用现有值兜底）。
    - updated_at 由模型层 auto_now=True 自动维护，read_only 双重保险。
    """

    class Meta:
        model = CredentialSlot
        fields = ['app_id', 'access_token', 'updated_at']
        read_only_fields = ['updated_at']
        extra_kwargs = {
            'app_id':       {'allow_blank': True, 'allow_null': False, 'required': False},
            'access_token': {'allow_blank': True, 'allow_null': False, 'required': False},
        }
