<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Playlist extends CI_Controller {
    public function __construct() {
        parent::__construct();
        $this->load->model('Model_playlist');
        $this->load->model('Model_music');
        $this->load->library('session');
        if (!$this->session->userdata('logged_in')) {
            redirect('connect/login');
        }
    }

    public function index($data = []) {
        $is_logged_in = $this->session->userdata('logged_in');
        $user_email = $this->session->userdata('email');

        $data['is_logged_in'] = $is_logged_in;
        $data['playlists'] = $this->Model_playlist->getPlaylistsByUser($user_email);
        $data['genres'] = $this->Model_playlist->getGenres();

        $this->load->view('layout/header', $data);
        $this->load->view('playlists_list', $data);
        $this->load->view('layout/footer');
    }

    public function add() {
        if (!$this->session->userdata('logged_in')) {
            redirect('connect/login');
        }

        $user_email = $this->session->userdata('email');
        $name = $this->input->post('name');
        $type = $this->input->post('type');
        $numSongs = $this->input->post('numSongs');
        $genre = $this->input->post('genre');

        if ($type == 'random') {
            if ($numSongs <= 0) {
                $data['error'] = 'Le nombre de chansons doit être supérieur à 0';
                $this->index($data);
                return;
            }

            $result = $this->Model_playlist->createRandomPlaylist($user_email, $name, $numSongs, $genre);
            if (!$result) {
                $data['error'] = 'Erreur lors de la création de la playlist aléatoire';
                $this->index($data);
                return;
            }
        } else {
            $this->Model_playlist->addPlaylist($user_email, $name);
        }

        redirect('playlist');
    }

    public function selectPlaylist() {
        if (!$this->session->userdata('logged_in')) {
            redirect('connect/login');
        }

        $itemId = $this->input->post('itemId');
        $itemType = $this->input->post('itemType');
        $playlists = $this->Model_playlist->getPlaylistsByUser($this->session->userdata('email'));

        $data = array(
            'is_logged_in' => $this->session->userdata('logged_in'),
            'itemId' => $itemId,
            'itemType' => $itemType,
            'playlists' => $playlists
        );

        $this->load->view('layout/header', $data);
        $this->load->view('select_playlist', $data);
        $this->load->view('layout/footer');
    }

    public function addItems() {
        if (!$this->session->userdata('logged_in')) {
            redirect('connect/login');
        }

        $playlistId = $this->input->post('playlistId');
        $itemId = $this->input->post('itemId');
        $itemType = $this->input->post('itemType');

        if ($itemType == 'album') {
            $songs = $this->Model_music->getSongsByAlbum($itemId);
            foreach ($songs as $song) {
                $this->Model_playlist->addItem($playlistId, $song->trackId, 'song');
            }
        } else if ($itemType == 'artist') {
            $albums = $this->Model_music->getAlbumsByArtist($itemId);
            foreach ($albums as $album) {
                $songs = $this->Model_music->getSongsByAlbum($album->albumId);
                foreach ($songs as $song) {
                    $this->Model_playlist->addItem($playlistId, $song->trackId, 'song');
                }
            }
        } else {
            $this->Model_playlist->addItem($playlistId, $itemId, 'song');
        }

        redirect('playlist/view/' . $playlistId);
    }

    public function view($playlistId) {
        if (!$this->session->userdata('logged_in')) {
            redirect('connect/login');
        }

        $items = $this->Model_playlist->getPlaylistItems($playlistId);
        $itemCount = $this->Model_playlist->getPlaylistItemCount($playlistId);

        $data = array(
            'is_logged_in' => $this->session->userdata('logged_in'),
            'items' => $items,
            'itemCount' => $itemCount
        );

        $this->load->view('layout/header', $data);
        $this->load->view('playlist_details', $data);
        $this->load->view('layout/footer');
    }

    public function deleteItem($playlistId, $itemId) {
        if (!$this->session->userdata('logged_in')) {
            redirect('connect/login');
        }

        $this->Model_playlist->deleteItem($playlistId, $itemId);
        redirect('playlist/view/' . $playlistId);
    }

    public function delete($playlist_id) {
        if (!$this->session->userdata('logged_in')) {
            redirect('connect/login');
        }

        $this->Model_playlist->deletePlaylist($playlist_id);
        redirect('playlist');
    }

    public function duplicate($playlist_id) {
        if (!$this->session->userdata('logged_in')) {
            redirect('connect/login');
        }

        $this->Model_playlist->duplicatePlaylist($playlist_id);
        redirect('playlist');
    }

    public function rename() {
        if (!$this->session->userdata('logged_in')) {
            redirect('connect/login');
        }

        $playlistId = $this->input->post('playlistId');
        $newName = $this->input->post('newName');

        $this->Model_playlist->renamePlaylist($playlistId, $newName);
        redirect('playlist');
    }
}
?>