from odoo import models, fields


class EncoachNotification(models.Model):
    _name = 'encoach.notification'
    _description = 'Notification'
    _order = 'create_date desc'

    user_id = fields.Many2one('res.users', required=True, ondelete='cascade', index=True)
    title = fields.Char(required=True)
    message = fields.Text()
    type = fields.Selection([
        ('info', 'Info'),
        ('warning', 'Warning'),
        ('success', 'Success'),
        ('error', 'Error'),
    ], default='info')
    is_read = fields.Boolean(default=False)
    read_at = fields.Datetime()
    reference_model = fields.Char()
    reference_id = fields.Integer()


class EncoachNotificationRule(models.Model):
    _name = 'encoach.notification.rule'
    _description = 'Notification Rule'

    name = fields.Char(required=True)
    event_type = fields.Char(required=True, help='e.g. deadline, chapter_unlock, '
                                                 'result_release, assignment, exam')
    template = fields.Text()
    is_active = fields.Boolean(default=True)
    recipients = fields.Selection([
        ('all', 'All Users'),
        ('students', 'Students Only'),
        ('teachers', 'Teachers Only'),
        ('admins', 'Admins Only'),
    ], default='all')
    channels = fields.Char(help='Legacy: comma-separated email,push,in_app. '
                                'New code should use `channel` instead.')

    # New fields aligned with the admin Configuration UI (NotificationRules page)
    days_before = fields.Integer(default=1,
                                 help='Lead time in days before the event fires.')
    frequency = fields.Selection([
        ('once', 'Once'),
        ('daily', 'Daily'),
        ('custom', 'Custom schedule'),
    ], default='once')
    channel = fields.Selection([
        ('in_app', 'In-App'),
        ('email', 'Email'),
        ('both', 'Both'),
    ], default='in_app')
    entity_id = fields.Many2one('encoach.entity', ondelete='set null')


class EncoachNotificationPreference(models.Model):
    _name = 'encoach.notification.preference'
    _description = 'Notification Preference'
    _rec_name = 'user_id'

    user_id = fields.Many2one('res.users', required=True, ondelete='cascade', index=True)
    email_enabled = fields.Boolean(default=True)
    push_enabled = fields.Boolean(default=True)
    in_app_enabled = fields.Boolean(default=True)
    digest_frequency = fields.Selection([
        ('realtime', 'Real-time'),
        ('daily', 'Daily'),
        ('weekly', 'Weekly'),
    ], default='realtime')
