from datetime import timedelta

from odoo import api, fields, models


class AffiliateWidgetEvent(models.Model):
    _name = "affiliate.widget.event"
    _description = "Affiliate Widget Event"
    _order = "event_date desc"

    config_id = fields.Many2one(
        "affiliate.widget.config",
        string="Widget Config",
        required=True,
        ondelete="cascade",
        index=True,
    )
    partner_id = fields.Many2one(
        related="config_id.partner_id",
        string="Affiliate",
        store=True,
        index=True,
    )
    event_type = fields.Selection(
        [
            ("impression", "Widget Opened"),
            ("click", "Job Clicked"),
        ],
        string="Event Type",
        required=True,
        index=True,
    )
    job_id = fields.Many2one(
        "hr.job",
        string="Job",
        ondelete="set null",
    )
    referrer_url = fields.Char(string="Referrer URL")
    visitor_ip = fields.Char(string="Visitor IP")
    event_date = fields.Datetime(
        string="Event Date",
        default=fields.Datetime.now,
        index=True,
    )

    @api.autovacuum
    def _gc_old_events(self):
        """Remove events older than 90 days via direct SQL for efficiency."""
        cutoff = fields.Datetime.now() - timedelta(days=90)
        self.env.cr.execute(
            "DELETE FROM affiliate_widget_event WHERE event_date < %s",
            (cutoff,),
        )
