<?php

function have_to_run_this_week($start_date, $cadence) 
{ 
    $return_value;
    switch($cadence) {
        case 1:
            $return_value = true;
            break;
        case 2:
        case 4:
            $today = new DateTime();
            $date = new DateTime($start_date);
            $modulo = 7 * $cadence;
            $date_difference = date_diff($today, $date);
            $days_difference = $date_difference->days;
            if (($days_difference % $modulo) < 7) {
                $return_value = true;
                break;
            } 
            $return_value = false;
            break;
    }

    return $return_value;
}

function show_palinsesto($args)
{
    $week_days = ['Luned&igrave;','Marted&igrave;','Mercoled&igrave;','Gioved&igrave;','Venerd&igrave;','Sabato','Domenica'];
    $tabs = $content = "";

    $broadcast_post = array(
        'post_type' => 'broadcast',
        'numberposts' => -1
    );

    $broadcasts = get_posts($broadcast_post);
    $palinsesto = [];

    foreach ($broadcasts as $post) {
        $on_air_day = $on_air_start = $on_air_end = $on_air_cadence = $on_air_start_date = "";
        for ($d=0;$d<7;$d++) {
            $on_air_day = get_post_meta($post->ID, 'on_air_day_'.$d, true);
            $on_air_start = get_post_meta($post->ID, 'on_air_start_'.$d, true);
            $on_air_end = get_post_meta($post->ID, 'on_air_end_'.$d, true);
            $on_air_cadence = get_post_meta($post->ID, 'on_air_cadence_'.$d, true);
            $on_air_start_date = get_post_meta($post->ID, 'on_air_start_date_'.$d, true);
            
            if (empty($on_air_cadence) || empty($on_air_start_date)) {
                $on_air_cadence = "1";
            }

            if (!empty($on_air_day)&&!empty($on_air_start)&&!empty($on_air_end)) {

                if (have_to_run_this_week($on_air_start_date, (int)$on_air_cadence)) {
                    $palinsesto[(int)$on_air_day][(string)$on_air_start] =
                        array(
                          'ID' => $post->ID,
                          'start' => $on_air_start,
                          'end' => $on_air_end,
                          'on_air' => true,
                          'title' => $post->post_title,
                          'excerpt' => $post->post_excerpt,
                          'thumb_url' => get_the_post_thumbnail_url($post->ID, 'full'),
                          'the_permalink' => get_permalink($post->ID),
                        );
                }
            }
        }

        $rerun_day = $rerun_start = $rerun_end = $rerun_cadence = $rerun_start_date = "";
        for ($d=0;$d<7;$d++) {
            $rerun_day = get_post_meta($post->ID, 'rerun_day_'.$d, true);
            $rerun_start = get_post_meta($post->ID, 'rerun_start_'.$d, true);
            $rerun_end = get_post_meta($post->ID, 'rerun_end_'.$d, true);
            $rerun_cadence = get_post_meta($post->ID, 'rerun_cadence_'.$d, true); 
            $rerun_start_date = get_post_meta($post->ID, 'rerun_start_date_'.$d, true);
            
            if (empty($rerun_cadence) || empty($rerun_start_date)) {
                $rerun_cadence = "1"; //default settimanale
            } 
           
            if (!empty($rerun_day)&&!empty($rerun_start)&&!empty($rerun_end)) {

                if (have_to_run_this_week($rerun_start_date, (int)$rerun_cadence)) {
                    $palinsesto[(int)$rerun_day][(string)$rerun_start] =
                        array(
                            'ID' => $post->ID,
                            'start' => $rerun_start,
                            'end' => $rerun_end,
                            'on_air' => false,
                            'title' => $post->post_title,
                            'excerpt' => $post->post_excerpt,
                            'thumb_url' => get_the_post_thumbnail_url($post->ID, 'full'),
                            'the_permalink' => get_permalink($post->ID),
                        );
                }
            }
        }
    }
    
    ksort($palinsesto);

//  echo '<pre>';
//  print_r($palinsesto);
//  echo '</pre>';

    $today = date("N");

    for ($x=1;$x<=7;$x++) {

        /*echo '<pre>';
        echo("$today,$x");
        echo '</pre>';*/

        if ($x == $today)
            $tabs .= "<li class='default-gator-tab'>".$week_days[$x-1]."</li>";
        else
            $tabs .= "<li>".$week_days[$x-1]."</li>";
            $content .= '<li class="gator-tab">';
            
            if (!empty($palinsesto[$x])) {
                ksort($palinsesto[$x]);
                foreach ($palinsesto[$x] as $hour => $broadcast) {
                    $content .= '<div class="single-broadcast ';
                    $content .= (!$broadcast['on_air']) ? "rerun" : "onair";
                    $content .= '">';
                    $content .= '<a href="'.$broadcast['the_permalink'].'" title="'.$broadcast['title'].'">';
                    $content .= '<h4 class="broadcast-title">'.$broadcast['title'].'</h4>';
                    $content .= '</a>';
                /* Indico sotto al titolo se la trasmissione รจ una replica o una diretta */
                    $content .= (!$broadcast['on_air']) ? "[replica]" : "[diretta]";
                    $content .= '<p class="broadcast-time">'.$broadcast['start'].' - '.$broadcast['end'].'</p>';
                    $content .= '<p class="broadcast-excerpt">'.$broadcast['excerpt'].'</p>';
                    $content .= "</div>";
                }
            }
        
        $content .= '</li>';
    } ?>
<div class="gator-tabs-container">
    <ul class="gator-tabs-header">
        <?php echo $tabs; ?>
    </ul>
    <ul class="gator-tabs">
        <?php echo $content; ?>
    </ul>
</div>

<?php
    wp_enqueue_style('palinsesto_style', plugin_dir_url(__FILE__).'css/palinsesto.css', array(), '1.0', 'screen');
    wp_enqueue_script('palinsesto_js', plugin_dir_url(__FILE__).'js/palinsesto.js', array(), '1.0', true);
}
add_shortcode('palinsesto', 'show_palinsesto');