package dto

// JSON:API Audit DTOs

type AuditLogAttributes struct {
	RequestID   string      `json:"request_id,omitempty" example:"req-12345"`
	ActorUserID string      `json:"actor_user_id,omitempty" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
	Layer       string      `json:"layer" example:"api"`
	Module      string      `json:"module" example:"reserve_ac"`
	Action      string      `json:"action" example:"http.request"`
	Method      string      `json:"method,omitempty" example:"GET"`
	Path        string      `json:"path,omitempty" example:"/api/v1/users/get-all"`
	StatusCode  int         `json:"status_code,omitempty" example:"200"`
	Success     bool        `json:"success" example:"true"`
	IP          string      `json:"ip,omitempty" example:"127.0.0.1"`
	UserAgent   string      `json:"user_agent,omitempty" example:"Mozilla/5.0"`
	Message     string      `json:"message,omitempty" example:"HTTP 200"`
	Metadata    interface{} `json:"metadata,omitempty"`
	CreatedAt   string      `json:"created_at,omitempty" example:"2026-03-11T12:00:00Z"`
}

type AuditLogResource struct {
	Type       string             `json:"type" example:"audit_log"`
	ID         string             `json:"id" example:"018f3a5c-7a6f-7c2a-8d4a-4b5b1f6c8e9d"`
	Attributes AuditLogAttributes `json:"attributes"`
}

type AuditLogListResponse struct {
	Data []AuditLogResource `json:"data"`
	Meta struct {
		PageNumber int   `json:"page_number" example:"1"`
		PageSize   int   `json:"page_size" example:"20"`
		Total      int64 `json:"total" example:"120"`
	} `json:"meta"`
}
