<?php
namespace App\Entity;
use App\Repository\UserProfileRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
#[ORM\Entity(repositoryClass: UserProfileRepository::class)]
class UserProfile
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\OneToOne(inversedBy: 'profile')]
#[ORM\JoinColumn(nullable: false)]
private ?User $user = null;
#[ORM\Column(length: 255, nullable: true)]
#[Groups(["chat_message"])]
private ?string $avatar = null;
#[ORM\Column(type: 'text', nullable: true)]
private ?string $bio = null;
#[ORM\Column(type: 'json', nullable: true)]
#[Groups(["chat_message"])]
private ?array $preferences = null;
#[ORM\Column(length: 255, nullable: true)]
private ?string $location = null;
#[ORM\Column(length: 255, nullable: true)]
private ?string $jobTitle = null;
#[ORM\Column(length: 255, nullable: true)]
private ?string $linkedinUrl = null;
#[ORM\Column(length: 255, nullable: true)]
private ?string $twitterUrl = null;
#[ORM\Column(length: 255, nullable: true)]
private ?string $instagramUrl = null;
public function getId(): ?int
{
return $this->id;
}
public function getUser(): ?User
{
return $this->user;
}
public function setUser(User $user): static
{
$this->user = $user;
return $this;
}
public function getAvatar(): ?string
{
return $this->avatar;
}
public function setAvatar(?string $avatar): static
{
$this->avatar = $avatar;
return $this;
}
public function getBio(): ?string
{
return $this->bio;
}
public function setBio(?string $bio): static
{
$this->bio = $bio;
return $this;
}
public function getPreferences(): ?array
{
return $this->preferences;
}
public function setPreferences(?array $preferences): static
{
$this->preferences = $preferences;
return $this;
}
// Helper methods for specific chat preferences
public function isChatSoundEnabled(): bool
{
return $this->preferences['chat_sound_enabled'] ?? true; // Default to true
}
public function setChatSoundEnabled(bool $enabled): static
{
$this->preferences['chat_sound_enabled'] = $enabled;
return $this;
}
public function isDirectMessagesAllowed(): bool
{
return $this->preferences['allow_direct_messages'] ?? true; // Default to true
}
public function setDirectMessagesAllowed(bool $allowed): static
{
$this->preferences['allow_direct_messages'] = $allowed;
return $this;
}
public function getLocation(): ?string
{
return $this->location;
}
public function setLocation(?string $location): static
{
$this->location = $location;
return $this;
}
public function getJobTitle(): ?string
{
return $this->jobTitle;
}
public function setJobTitle(?string $jobTitle): static
{
$this->jobTitle = $jobTitle;
return $this;
}
public function getLinkedinUrl(): ?string
{
return $this->linkedinUrl;
}
public function setLinkedinUrl(?string $linkedinUrl): static
{
$this->linkedinUrl = $linkedinUrl;
return $this;
}
public function getTwitterUrl(): ?string
{
return $this->twitterUrl;
}
public function setTwitterUrl(?string $twitterUrl): static
{
$this->twitterUrl = $twitterUrl;
return $this;
}
public function getInstagramUrl(): ?string
{
return $this->instagramUrl;
}
public function setInstagramUrl(?string $instagramUrl): static
{
$this->instagramUrl = $instagramUrl;
return $this;
}
/**
* Get social media links as an array
*/
public function getSocialLinks(): array
{
$links = [];
if ($this->linkedinUrl) {
$links['linkedin'] = $this->linkedinUrl;
}
if ($this->twitterUrl) {
$links['twitter'] = $this->twitterUrl;
}
if ($this->instagramUrl) {
$links['instagram'] = $this->instagramUrl;
}
return $links;
}
}