package social

import (
	"time"

	"github.com/google/uuid"
	"gorm.io/gorm"
)

// PostType définit le type de post
type PostType string

const (
	PostTypeStatus   PostType = "status"
	PostTypeShare    PostType = "share"
	PostTypeRelease  PostType = "release"
	PostTypeActivity PostType = "activity" // Pour les activités automatiques (ex: achat)
)

// Post représente une publication sociale d'un utilisateur
type Post struct {
	ID      uuid.UUID `gorm:"type:uuid;primaryKey;default:gen_random_uuid()" json:"id"`
	UserID  uuid.UUID `gorm:"type:uuid;not null;index" json:"user_id"`
	Content string    `gorm:"type:text" json:"content"`
	Type    PostType  `gorm:"default:'status'" json:"type"`

	// Attachments (Optionnel)
	TrackID    *uuid.UUID `gorm:"type:uuid" json:"track_id,omitempty"`
	PlaylistID *uuid.UUID `gorm:"type:uuid" json:"playlist_id,omitempty"`

	// Metrics (Cached)
	LikeCount    int `gorm:"default:0" json:"like_count"`
	CommentCount int `gorm:"default:0" json:"comment_count"`

	CreatedAt time.Time      `gorm:"autoCreateTime;index" json:"created_at"`
	UpdatedAt time.Time      `gorm:"autoUpdateTime" json:"updated_at"`
	DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
}

// Like représente une interaction "J'aime"
// Polymorphisme via TargetType + TargetID
type Like struct {
	ID         uuid.UUID `gorm:"type:uuid;primaryKey;default:gen_random_uuid()" json:"id"`
	UserID     uuid.UUID `gorm:"type:uuid;not null;index" json:"user_id"`
	TargetID   uuid.UUID `gorm:"type:uuid;not null;index" json:"target_id"`
	TargetType string    `gorm:"not null" json:"target_type"` // "post", "track", "playlist"
	CreatedAt  time.Time `gorm:"autoCreateTime" json:"created_at"`
}

// Comment représente un commentaire
type Comment struct {
	ID         uuid.UUID      `gorm:"type:uuid;primaryKey;default:gen_random_uuid()" json:"id"`
	UserID     uuid.UUID      `gorm:"type:uuid;not null;index" json:"user_id"`
	TargetID   uuid.UUID      `gorm:"type:uuid;not null;index" json:"target_id"`
	TargetType string         `gorm:"not null" json:"target_type"` // "post", "track", "playlist"
	Content    string         `gorm:"type:text;not null" json:"content"`
	CreatedAt  time.Time      `gorm:"autoCreateTime" json:"created_at"`
	UpdatedAt  time.Time      `gorm:"autoUpdateTime" json:"updated_at"`
	DeletedAt  gorm.DeletedAt `gorm:"index" json:"-"`
}

// ActivityType définit le type d'activité
type ActivityType string

const (
	ActivityPost     ActivityType = "post"
	ActivityLike     ActivityType = "like"
	ActivityComment  ActivityType = "comment"
	ActivityFollow   ActivityType = "follow"
	ActivityPurchase ActivityType = "purchase" // Nouveau
)

// FeedItem représente un élément agrégé pour le flux d'actualité
type FeedItem struct {
	ID         string       `json:"id"`
	Type       ActivityType `json:"type"`
	ActorID    uuid.UUID    `json:"actor_id"`
	TargetID   uuid.UUID    `json:"target_id"`
	TargetType string       `json:"target_type"`
	Content    string       `json:"content,omitempty"`
	CreatedAt  time.Time    `json:"created_at"`

	// Embedded objects
	ActorName   string `json:"actor_name,omitempty"`
	ActorAvatar string `json:"actor_avatar,omitempty"`
}
