@router.post("")
async def add_subject(payload: SubjectIn, user: User = Depends(get_current_user),
                      db: AsyncSession = Depends(get_db)):
    count = (await db.execute(select(func.count(SubjectLine.id)).where(
        SubjectLine.user_id == user.id))).scalar()
    if count >= settings.MAX_SUBJECTS:
        raise HTTPException(400, f"Maximum of {settings.MAX_SUBJECTS} subject variations reached")
    row = SubjectLine(user_id=user.id, subject=payload.subject.strip()[:500])
    db.add(row)
    await db.commit()
    return {"id": row.id, "subject": row.subject}


@router.post("")
async def create_template(payload: TemplateIn, user: User = Depends(get_current_user),
                          db: AsyncSession = Depends(get_db)):
    if not payload.body_html.strip():
        raise HTTPException(400, "HTML body is required")
    if len(payload.body_html) > 1024 * 1024:
        raise HTTPException(413, "Template too large (max 1 MB)")
    problems = []
    if re.search(r"<script", payload.body_html, re.I):
        problems.append("Script tags are not allowed")
    if problems:
        raise HTTPException(400, problems)
    row = EmailTemplate(user_id=user.id, name=payload.name[:250], body_html=payload.body_html,
                        body_text=payload.body_text, subject_hint=payload.subject_hint[:500],
                        source="paste")
    db.add(row)
    await db.commit()
    return {"id": row.id, "name": row.name}


@router.post("/upload")
class SuppressionIn(BaseModel):
    email: EmailStr
    reason: str = "manual"
    source: str = ""


class BulkEmails(BaseModel):
    emails: list[EmailStr]
31:class ManualIn(BaseModel):
32-    list_id: int
33-    recipient: ManualRecipient
34-
35-
36-class ListCreate(BaseModel):
37-    name: str
