<?php
/**
 * Plugin Name: LifterLMS Course Progress
 * Plugin URI: #
 * Description: Shows latest enrolled courses with progress information using shortcode [llms_course_progress]
 * Version: 1.0.0
 * Author: Mridul
 * Text Domain: llms-course-progress
 * Domain Path: /languages
 * LifterLMS Minimum Version: 3.0.0
 */

defined( 'ABSPATH' ) || exit;

/**
 * Main plugin class
 */
class LLMS_Course_Progress {

    /**
     * Constructor
     */
    public function __construct() {
        add_action('init', array($this, 'init'));
        add_action('wp_enqueue_scripts', array($this, 'enqueue_styles'));
    }

    /**
     * Initialize plugin
     */
    public function init() {
        add_shortcode('llms_course_progress', array($this, 'output_progress'));
        load_plugin_textdomain('llms-course-progress', false, dirname(plugin_basename(__FILE__)) . '/languages');
    }

    /**
     * Enqueue required styles
     */
    public function enqueue_styles() {
        wp_enqueue_style('llms-course-progress', plugins_url('css/style.css', __FILE__));
    }

    /**
     * Get enrolled courses for a student
     * 
     * @param int $limit Number of courses to retrieve
     * @return array Array of course IDs
     */
    private function get_enrolled_courses($limit) {
        global $wpdb;
        
        $student_id = get_current_user_id();
        if (!$student_id) {
            return array();
        }

        // Get enrolled courses ordered by enrollment date
        $query = $wpdb->prepare(
            "SELECT DISTINCT p.ID 
            FROM {$wpdb->posts} p
            JOIN {$wpdb->prefix}lifterlms_user_postmeta upm ON p.ID = upm.post_id
            WHERE upm.user_id = %d 
            AND upm.meta_key = '_status'
            AND upm.meta_value = 'enrolled'
            AND p.post_type = 'course'
            ORDER BY upm.updated_date DESC
            LIMIT %d",
            $student_id,
            $limit
        );

        return $wpdb->get_col($query);
    }

    /**
     * Count completed lessons in a course for a student
     * 
     * @param LLMS_Course $course Course object
     * @param LLMS_Student $student Student object
     * @return int Number of completed lessons
     */
    private function count_completed_lessons($course, $student) {
        $completed = 0;
        $lessons = $course->get_lessons('ids');
        
        if (!empty($lessons)) {
            foreach ($lessons as $lesson_id) {
                if ($student->is_complete($lesson_id, 'lesson')) {
                    $completed++;
                }
            }
        }
        
        return $completed;
    }

    /**
     * Shortcode output
     *
     * @param array $atts Shortcode attributes
     * @return string
     */
    public function output_progress($atts) {
        $atts = shortcode_atts(
            array(
                'limit' => 10, // Number of courses to display
            ),
            $atts,
            'llms_course_progress'
        );

        if (!is_user_logged_in()) {
            return __('You must be logged in to view your courses.', 'llms-course-progress');
        }

        // Get enrolled courses
        $course_ids = $this->get_enrolled_courses($atts['limit']);
        
        if (empty($course_ids)) {
            return __('You are not enrolled in any courses.', 'llms-course-progress');
        }

        ob_start();
        ?>
        <div class="llms-course-progress" dir="<?php echo is_rtl() ? 'rtl' : 'ltr'; ?>">
            <?php foreach ($course_ids as $course_id) :
                $student = llms_get_student();
                $course = new LLMS_Course($course_id);
                $progress = $student->get_progress($course_id, 'course');
                $total_lessons = $course->get_lessons_count();
                $completed_lessons = $this->count_completed_lessons($course, $student);
                
                // Get the continue link from the course continue shortcode
                $continue_link = do_shortcode("[lifterlms_course_continue course_id=\"{$course_id}\" text=\"\" button_class=\"hidden\"]");
                // Extract href from the continue link
                preg_match('/href=["\']([^"\']+)["\']/', $continue_link, $matches);
                $course_link = !empty($matches[1]) ? $matches[1] : get_permalink($course_id);
                ?>
                <div class="llms-course-progress-item">
                    <h3 class="llms-course-title">
                        <a href="<?php echo esc_url($course_link); ?>">
                            <?php echo esc_html(get_the_title($course_id)); ?>
                        </a>
                    </h3>
                    <div class="llms-progress">
                        <div class="progress-bar">
                            <div class="progress-indicator" style="width: <?php echo esc_attr($progress); ?>%"></div>
                        </div>
                        <div class="llms-progress-text">
                            <?php 
                            if (is_rtl()) {
                                printf(
                                    esc_html__('%%(%3$d) completed lessons %2$d/%1$d', 'llms-course-progress'),
                                    $total_lessons,
                                    $completed_lessons,
                                    $progress
                                );
                            } else {
                                printf(
                                    esc_html__('%1$d/%2$d lessons completed (%3$d%%)', 'llms-course-progress'),
                                    $completed_lessons,
                                    $total_lessons,
                                    $progress
                                );
                            }
                            ?>
                        </div>
                    </div>
                </div>
            <?php endforeach; ?>
        </div>
        <?php
        return ob_get_clean();
    }
}

// Initialize the plugin
new LLMS_Course_Progress();
