<?php
// This file is part of the Studyplan plugin for Moodle
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see <https://www.gnu.org/licenses/>.

/**
 * Base class to scan submissions in activities
 * @package    local_treestudyplan
 * @copyright  2023 P.M. Kuipers
 * @license    https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */

namespace local_treestudyplan\local\ungradedscanners;

use grade_item;

/**
 * Base class for activity scanners
 */
abstract class scanner_base {
    /** @var grade_item */
    protected $gi;

    /**
     * Create new object based on grade_item
     * @param grade_item $gi The grade item for this activity
     */
    public function __construct(grade_item $gi) {
        $this->gi = $gi;
    }

    /**
     * Count the number of students wit ungraded submissions in this activity
     * @param array $courseuserids
     * @return int Number of students with ungraded submissions
     */
    abstract public function count_ungraded($courseuserids = []);

    /**
     * Count the number of students wit (all) graded submissions in this activity
     * @param array $courseuserids
     * @return int Number of students with graded submission
     */
    abstract public function count_graded($courseuserids = []);

    /**
     * Check if specified user has ungraded submission in this activity
     * @param mixed $userid User id of user to check
     * @return bool If specified user has ungraded submissions in this activity
     */
    abstract public function has_ungraded_submission($userid);
}
