<?php

namespace App\Models;

use CodeIgniter\Model;

/**
 * Weekly class progress reports (one row per subject per week).
 *
 * unit_title stores a compact summary of unit/chapter rows: segments joined with " ; ".
 * Teacher-entered custom Islamic or Quran topics use the prefix "Custom / {text}"
 * (see {@see \App\Controllers\ClassProgressController::CUSTOM_UNIT_ROW_LABEL} and
 * {@see \App\Controllers\ClassProgressController::splitUnitTitleForDisplay()}).
 * DB column is VARCHAR(120); controller truncates to match.
 */
class ClassProgressReportModel extends Model
{
    protected $table = 'class_progress_reports';
    protected $primaryKey = 'id';
    protected $returnType = 'array';
    protected $allowedFields = [
        'class_section_id',
        'teacher_id',
        'school_year',
        'week_start',
        'week_end',
        'subject',
        'unit_title',
        'covered',
        'homework',
        'assessment',
        'status',
        'status_notes',
        'class_notes',
        'next_week_plan',
        'support_needed',
        'flags_json',
        'attachment_path',
    ];

    protected $useTimestamps = true;
    protected $createdField = 'created_at';
    protected $updatedField = 'updated_at';

    /**
     * Validation is performed in {@see \App\Controllers\ClassProgressController} on HTTP input.
     * Rules below document schema limits and can be enabled if you set {@see $skipValidation} to false.
     */
    protected $skipValidation = true;

    protected $validationRules = [
        'class_section_id' => 'required|integer',
        'teacher_id' => 'required|integer',
        'school_year' => 'permit_empty|string|max_length[9]',
        'week_start' => 'required|valid_date[Y-m-d]',
        'week_end' => 'required|valid_date[Y-m-d]',
        'subject' => 'required|string|max_length[160]',
        'unit_title' => 'permit_empty|string|max_length[120]',
        'covered' => 'permit_empty|string',
        'homework' => 'permit_empty|string',
        'assessment' => 'permit_empty|string',
        'status' => 'permit_empty|in_list[on_track,slightly_behind,behind]',
        'status_notes' => 'permit_empty|string|max_length[200]',
        'class_notes' => 'permit_empty|string',
        'next_week_plan' => 'permit_empty|string',
        'support_needed' => 'permit_empty|string',
        'flags_json' => 'permit_empty|string',
        'attachment_path' => 'permit_empty|string|max_length[255]',
    ];

    protected $validationMessages = [
        'unit_title' => [
            'max_length' => 'Unit and chapter summary cannot exceed 120 characters.',
        ],
        'subject' => [
            'max_length' => 'Subject cannot exceed 160 characters.',
        ],
    ];
}
