# -*- coding: utf-8 -*-
from odoo import fields, models


class ResPartner(models.Model):
    _inherit = 'res.partner'

    helpdesk_ticket_count = fields.Integer(compute='_compute_helpdesk_ticket_count')
    helpdesk_ticket_ids = fields.One2many(
        comodel_name='so.helpdesk.ticket',
        inverse_name='partner_id',
        string='Helpdesk Tickets',
    )

    def _compute_helpdesk_ticket_count(self):
        if not self.env.user.has_group('so_helpdesk.group_helpdesk_user'):
            for partner in self:
                partner.helpdesk_ticket_count = 0
            return
        ticket_data = self.env['so.helpdesk.ticket']._read_group(
            [('partner_id', 'in', self.ids)],
            ['partner_id'],
            ['__count'],
        )
        counts = {partner.id: count for partner, count in ticket_data}
        for partner in self:
            partner.helpdesk_ticket_count = counts.get(partner.id, 0)

    def action_view_helpdesk_tickets(self):
        self.ensure_one()
        return {
            'type': 'ir.actions.act_window',
            'name': 'Tickets',
            'res_model': 'so.helpdesk.ticket',
            'view_mode': 'tree,form,kanban',
            'domain': [('partner_id', '=', self.id)],
            'context': {'default_partner_id': self.id},
        }
