package notification

import (
	"tm/pkg/response"
)

// CreateRequest represents the request to create a notification
type NotificationRequest struct {
	Recipient   []string             `json:"recipient"`
	Tender      string               `json:"tender" valid:"optional,stringlength(1|100)"`
	Channels    []DeliveryChannel    `json:"channels" valid:"required"`
	Type        NotificationType     `json:"type" valid:"required"`
	Priority    NotificationPriority `json:"priority" valid:"required"`
	Target      TargetAudienceType   `json:"target" valid:"required"`
	Title       string               `json:"title" valid:"required"`
	Description string               `json:"description" valid:"required"`
	Link        *string              `json:"link" valid:"optional,url"`
	Image       *string              `json:"image" valid:"optional,url"`
	ScheduleAt  int64                `json:"schedule_at" valid:"optional"`
}

// SearchForm represents the form for searching notifications
type SearchForm struct {
	Status    string `query:"status" valid:"optional"`
	Method    string `query:"method" valid:"optional"`
	EventType string `query:"event_type" valid:"optional"`
	Type      string `query:"type" valid:"optional"`
	Recipient []string `query:"recipient" json:"recipient" valid:"optional"`
	Seen      *bool  `query:"seen" valid:"optional"`
	Priority  string `query:"priority" valid:"optional"`
}

type NotificationListResponse struct {
	Notifications []*NotificationResponse `json:"notifications"`
	Meta          *response.Meta          `json:"meta"`
}

type NotificationResponse struct {
	ID          string            `json:"id"`
	UserID      string            `json:"user_id"`
	Recipient   any               `json:"recipient"`
	Title       string            `json:"title"`
	Message     string            `json:"message"`
	Link        *string           `json:"link"`
	Image       *string           `json:"image"`
	Priority    string            `json:"priority"`
	Type        string            `json:"type"`
	EventType   string            `json:"event_type"`
	Status      string            `json:"status"`
	Methods     map[string]string `json:"methods"`
	Metadata    map[string]any    `json:"metadata"`
	ScheduleAt  int64             `json:"schedule_at"`
	CreatedAt   int64             `json:"created_at"`
	UpdatedAt   int64             `json:"updated_at"`
	Seen        bool              `json:"seen"`
	SeenAt      int64             `json:"seen_at"`
	IsScheduled bool              `json:"is_scheduled"`
	ScheduledAt int64             `json:"scheduled_at"`
}
