<?php

namespace App\Responses;

use App\Http\Resources\AlbumResource;
use App\Http\Resources\SongResource;
use App\Models\Album;
use App\Models\Song;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\PrivateChannel;

class SongUploadResponse extends BroadcastableResponse
{
    protected function __construct(private readonly Song $song, private readonly Album $album)
    {
    }

    public function broadcastOn(): Channel|string
    {
        return new PrivateChannel("user.{$this->song->owner->public_id}");
    }

    public function broadcastAs(): string
    {
        return 'song.uploaded';
    }

    /** @inheritdoc */
    public function toArray(): array
    {
        return [
            'song' => SongResource::make($this->song)->for($this->song->owner),
            'album' => AlbumResource::make($this->album)->for($this->album->user),
        ];
    }
}