from django import forms


class ChatForm(forms.Form):
    # 该表单只负责收集用户问题和可选文档范围，
    # 不承载任何 Agent 业务逻辑，便于在 View 层保持轻量。
    message = forms.CharField(
        label="问题",
        max_length=4000,
        error_messages={
            "required": "请输入要咨询的问题。",
            "max_length": "问题过长，请控制在 4000 字以内。",
        },
        widget=forms.Textarea(
            attrs={
                "rows": 8,
                "placeholder": "例如：请结合已上传 SOP，分析当前异常的原因、风险等级和建议动作。",
            }
        ),
    )
    document_ids = forms.MultipleChoiceField(
        label="文档范围",
        required=False,
        choices=(),
        widget=forms.CheckboxSelectMultiple,
        error_messages={"invalid_choice": "请选择当前场景下已入库的文档。"},
    )

    def __init__(self, *args, documents=None, **kwargs):
        super().__init__(*args, **kwargs)
        documents = documents or []
        # 仅允许选择当前场景且已完成入库的文档，
        # 避免前端把无效文件范围传入 Agent Core。
        self.fields["document_ids"].choices = [
            (str(document.id), document.original_name) for document in documents
        ]

    def clean_document_ids(self):
        # View 与 Agent Core 都使用整型文档 ID，统一在表单层完成转换。
        return [int(document_id) for document_id in self.cleaned_data.get("document_ids", [])]
