package types

// User-related types shared between handlers and services

// UpdateProfileRequest represents profile update data
type UpdateProfileRequest struct {
	FirstName      *string                `json:"first_name"`
	LastName       *string                `json:"last_name"`
	Username       *string                `json:"username"`
	Bio            *string                `json:"bio"`
	Location       *string                `json:"location"`
	BirthDate      *string                `json:"birth_date"`
	Gender         *string                `json:"gender"`
	Timezone       *string                `json:"timezone"`
	SocialLinks    map[string]interface{} `json:"social_links"`
	WebsiteURL     *string                `json:"website_url"`
	ProfilePrivacy *string                `json:"profile_privacy"`
}

// UserSettingsResponse represents user settings
type UserSettingsResponse struct {
	Notifications NotificationSettings `json:"notifications"`
	Privacy       PrivacySettings      `json:"privacy"`
	Content       ContentSettings      `json:"content"`
	Preferences   PreferenceSettings   `json:"preferences"`
}

// NotificationSettings represents notification preferences
type NotificationSettings struct {
	Email     bool `json:"email"`
	Push      bool `json:"push"`
	InApp     bool `json:"in_app"`
	Comments  bool `json:"comments"`
	Likes     bool `json:"likes"`
	Followers bool `json:"followers"`
	Mentions  bool `json:"mentions"`
	Playlist  bool `json:"playlist"`
}

// PrivacySettings represents privacy preferences
type PrivacySettings struct {
	ProfileVisibility string `json:"profile_visibility"`
	PlaylistsPublic   bool   `json:"playlists_public"`
}

// ContentSettings represents content preferences
type ContentSettings struct {
	ExplicitContent bool `json:"explicit_content"`
}

// PreferenceSettings represents general preferences
type PreferenceSettings struct {
	Language   string `json:"language"`
	Timezone   string `json:"timezone"`
	DateFormat string `json:"date_format"`
}

// UpdateSettingsRequest represents settings update data
type UpdateSettingsRequest struct {
	Notifications *NotificationSettings `json:"notifications,omitempty"`
	Privacy       *PrivacySettings      `json:"privacy,omitempty"`
	Content       *ContentSettings      `json:"content,omitempty"`
	Preferences   *PreferenceSettings   `json:"preferences,omitempty"`
}
