from datetime import datetime from typing import Optional from pydantic import BaseModel, EmailStr from .organization import OrgRole class Invitation(BaseModel): id: Optional[str] = None email: str organization_id: str role_in_org: OrgRole target_team_ids: list[str] = [] token_hash: str invited_by_user_id: str expires_at: datetime accepted_at: Optional[datetime] = None revoked_at: Optional[datetime] = None created_at: Optional[datetime] = None class InvitationCreate(BaseModel): email: EmailStr role_in_org: OrgRole = OrgRole.MEMBER target_team_ids: list[str] = [] expires_in_days: int = 7 class InvitationPreviewResponse(BaseModel): org_name: str org_slug: str inviter_name: str role_in_org: OrgRole target_email: str requires_password_setup: bool requires_microsoft_signin: bool is_existing_member: bool class InvitationAcceptRequest(BaseModel): token: str full_name: Optional[str] = None password: Optional[str] = None ms_id_token: Optional[str] = None class InvitationResponse(BaseModel): id: str email: str organization_id: str role_in_org: OrgRole invited_by_user_id: str expires_at: datetime accepted_at: Optional[datetime] = None revoked_at: Optional[datetime] = None created_at: Optional[datetime] = None is_expired: bool = False is_accepted: bool = False is_revoked: bool = False