/home2/mshostin/carnival.ms-hostingladz.com/app/Http/Controllers/MusicController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Music;
use App\Models\Event;
use App\Models\MusicImage;
use App\Models\User;
use App\Traits\ImageTrait;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;

class MusicController extends Controller
{
    use ImageTrait;
    public function index()
    {
        if (Auth::user()->isAdmin()) {
            // dd('ok');
            $musics = Music::with('imagesRelation')->get();
        } else {
            $musics = Music::with('imagesRelation')->where('user_id', Auth::id())->get();
        }

        $layout = match (Auth::user()->role->name) {
            'Admin' => 'dashboard.admin.layouts.app',
            'Vendor' => 'dashboard.vendor.layouts.app',
            'SubVendor' => 'dashboard.subvendor.layouts.app',
        };

        $events = Event::all();
        return view('dashboard.admin.musics.index', compact('layout', 'musics', 'events'));
    }

    public function create()
    {
        $users = '';
        if (Auth::user()->isAdmin()) {
            $users = User::whereHas('vendor.package', function ($query) {
                $query->where('title', 'Artistes');
            })->orWhereHas('subVendor.package', function ($query) {
                $query->where('title', 'Artistes');
            })->get();
        }
        // if (Auth::user()->isAdmin()) {
        //     return view('dashboard.admin.musics.create');
        // } elseif (Auth::user()->isVendor()) {
        //     return view('dashboard.vendor.musics.create');
        // } elseif (Auth::user()->isSubVendor()) {
        //     return view('dashboard.subVendor.musics.create');
        // }
        $layout = match (Auth::user()->role->name) {
            'Admin' => 'dashboard.admin.layouts.app',
            'Vendor' => 'dashboard.vendor.layouts.app',
            'SubVendor' => 'dashboard.subvendor.layouts.app',
        };

        // dd($layout);

        return view('dashboard.admin.musics.create', compact('layout', 'users'));
    }

    public function store(Request $request)
    {
        $data = $request->except(['cover_image', 'images', 'video']);

        $coverImage = $this->uploadImage($request->file('cover_image'), 'covers');

        if (isset($request->user_id) && $request->user_id != null) {
            $data['user_id'] = $request->user_id;
        } else {

            $data['user_id'] = Auth::id();
        }

        $data['cover_image'] = $coverImage;

        $music = Music::create($data);

        foreach ($request->images as $key => $imageFile) {
            $imagePath = $imageFile->store('uploads/images', 'public');
            $videoPath = $request->video[$key]->store('uploads/videos', 'public');

            $imageUrl = asset('storage/' . $imagePath);
            $videoUrl = asset('storage/' . $videoPath);

            MusicImage::create([
                'image' => $imageUrl,
                'document' => $videoUrl,
                'music_id' => $music->id,
            ]);
        }

        if ($music) {
            $musics = Music::all();
            $view = view('dashboard.admin.musics.table', compact('musics'))->render();

            $route = match (Auth::user()->role->name) {
                'Admin' => route('musics.index'),
                'Vendor' => route('vendor.musics.index'),
                'SubVendor' => route('subvendor.musics.index'),
            };

            return redirect()->route($route)->with(['message' => 'Music created successfully', 'table_html' => $view], 200);
        } else {
            return response()->json(['error' => 'Failed to create Music'], 500);
        }
    }

    public function edit($id)
    {
        $music = Music::with('imagesRelation')->find($id);

        $layout = match (Auth::user()->role->name) {
            'Admin' => 'dashboard.admin.layouts.app',
            'Vendor' => 'dashboard.vendor.layouts.app',
            'SubVendor' => 'dashboard.subvendor.layouts.app',
        };
        return view('dashboard.admin.musics.edit', compact('music', 'layout'));
    }

    public function update(Request $request, $id)
    {
        $data = $request->except(['cover_image', 'images', 'video']);

        $music = Music::findOrFail($id);

        if ($request->hasFile('cover_image')) {
            $this->deleteImage($music->cover_image);
            $data['cover_image'] = $this->uploadImage($request->file('cover_image'), 'covers');
        }

        if (isset($request->user_id) && $request->user_id != null) {
            $data['user_id'] = $request->user_id;
        } else {
            $data['user_id'] = Auth::id();
        }

        // Update music details
        $music->update($data);

        // Handle images and videos
        if ($request->hasFile('images') && $request->hasFile('video')) {
            // Delete existing MusicImage records
            MusicImage::where('music_id', $music->id)->delete();

            foreach ($request->file('images') as $key => $imageFile) {
                $imagePath = $imageFile->store('uploads/images', 'public');
                $videoPath = $request->file('video')[$key]->store('uploads/videos', 'public');

                $imageUrl = asset('storage/' . $imagePath);
                $videoUrl = asset('storage/' . $videoPath);

                MusicImage::create([
                    'image' => $imageUrl,
                    'document' => $videoUrl,
                    'music_id' => $music->id,
                ]);
            }
        }

        return response()->json(['message' => 'Music updated successfully', 'music' => $music]);
    }

    // public function update(Request $request, $id)
    // {
    //     $data = $request->except(['cover_image', 'images', 'video']);

    //     $music = Music::findOrFail($id);

    //     if ($music->user_id == null) {
    //         $data['user_id'] = Auth::id();
    //     }

    //     if ($request->hasFile('cover_image')) {
    //         $this->deleteImage($music->cover_image);
    //         $data['cover_image'] = $this->uploadImage($request->file('cover_image'), 'covers');
    //     }

    //     if ($request->hasFile('video')) {
    //         $this->deleteImage($music->video);
    //         $data['video'] = $this->uploadImage($request->file('video'), 'videos');
    //     }

    //     if ($request->hasFile('images')) {
    //         $music->imagesRelation()->delete();
    //         foreach ($request->file('images') as $image) {
    //             $imagePath = $this->uploadImage($image, 'images');
    //             $musicImage = MusicImage::create([
    //                 'music_id' => $music->id,
    //                 'image' => $imagePath
    //             ]);
    //             $music->imagesRelation()->save($musicImage);
    //         }
    //     }

    //     $music->update($data);

    //     return response()->json(['message' => 'Music updated successfully', 'music' => $music]);
    // }
    public function destroy($id)
    {
        $music = Music::findOrFail($id);
        $music->delete();

        if ($music) {
            $musics = Music::all();
            $view = view('dashboard.admin.musics.table', compact('musics'))->render();

            return response()->json(['message' => 'Music deleted successfully', 'table_html' => $view], 200);
        } else {
            return response()->json(['error' => 'Failed to delete Music'], 500);
        }
    }
}