# -*- coding: utf-8 -*-

from odoo import api, fields, models


class SoHelpdeskTeam(models.Model):
    _name = 'so.helpdesk.team'
    _description = 'Helpdesk Team'
    _inherit = ['mail.alias.mixin']
    _order = 'sequence, name'

    name = fields.Char(required=True, translate=True)
    sequence = fields.Integer(default=10)
    active = fields.Boolean(default=True)
    color = fields.Integer(string='Color Index')
    description = fields.Html(translate=True, sanitize=True)
    company_id = fields.Many2one(
        comodel_name='res.company',
        string='Company',
        default=lambda self: self.env.company,
        required=True,
    )
    leader_id = fields.Many2one(
        comodel_name='res.users',
        string='Team Leader',
        domain="[('share', '=', False)]",
    )
    member_ids = fields.Many2many(
        comodel_name='res.users',
        relation='so_helpdesk_team_member_rel',
        column1='team_id',
        column2='user_id',
        string='Team Members',
        domain="[('share', '=', False)]",
    )
    stage_ids = fields.One2many(
        comodel_name='so.helpdesk.stage',
        inverse_name='team_id',
        string='Stages',
    )
    ticket_type_ids = fields.Many2many(
        comodel_name='so.helpdesk.ticket.type',
        relation='so_helpdesk_team_ticket_type_rel',
        column1='team_id',
        column2='ticket_type_id',
        string='Ticket Types',
    )
    sla_ids = fields.One2many(
        comodel_name='so.helpdesk.sla',
        inverse_name='team_id',
        string='SLA Policies',
    )
    ticket_count = fields.Integer(compute='_compute_ticket_count')
    open_ticket_count = fields.Integer(compute='_compute_ticket_count')
    alias_email = fields.Char(related='alias_id.alias_full_name', string='Email Alias')

    def _compute_ticket_count(self):
        ticket_data = self.env['so.helpdesk.ticket']._read_group(
            [('team_id', 'in', self.ids)],
            ['team_id', 'is_closed'],
            ['__count'],
        )
        counts = {team.id: {'total': 0, 'open': 0} for team in self}
        for team, is_closed, count in ticket_data:
            counts[team.id]['total'] += count
            if not is_closed:
                counts[team.id]['open'] += count
        for team in self:
            team.ticket_count = counts[team.id]['total']
            team.open_ticket_count = counts[team.id]['open']

    def _alias_get_creation_values(self):
        values = super()._alias_get_creation_values()
        values['alias_model_id'] = self.env['ir.model']._get('so.helpdesk.ticket').id
        values['alias_defaults'] = {'team_id': self.id}
        return values

    def action_view_tickets(self):
        self.ensure_one()
        return {
            'type': 'ir.actions.act_window',
            'name': self.name,
            'res_model': 'so.helpdesk.ticket',
            'view_mode': 'kanban,tree,form,calendar,pivot,graph,activity',
            'domain': [('team_id', '=', self.id)],
            'context': {'default_team_id': self.id},
        }
