# -*- coding: utf-8 -*-
from odoo import http, _
from odoo.http import request
from odoo.addons.portal.controllers.portal import CustomerPortal, pager as portal_pager


class HelpdeskPortal(CustomerPortal):

    def _prepare_home_portal_values(self, counters):
        values = super()._prepare_home_portal_values(counters)
        partner = request.env.user.partner_id
        if 'helpdesk_ticket_count' in counters:
            values['helpdesk_ticket_count'] = request.env['so.helpdesk.ticket'].search_count([
                ('partner_id', '=', partner.id),
            ]) if request.env.user.has_group('base.group_portal') else 0
        return values

    @http.route(['/my/helpdesk', '/my/helpdesk/page/<int:page>'], type='http', auth='user', website=True)
    def portal_my_helpdesk_tickets(self, page=1, **kw):
        partner = request.env.user.partner_id
        Ticket = request.env['so.helpdesk.ticket']
        domain = [('partner_id', '=', partner.id)]
        ticket_count = Ticket.search_count(domain)
        pager = portal_pager(
            url='/my/helpdesk',
            total=ticket_count,
            page=page,
            step=20,
        )
        tickets = Ticket.search(domain, limit=20, offset=pager['offset'], order='create_date desc')
        return request.render('so_helpdesk.portal_my_tickets', {
            'tickets': tickets,
            'page_name': 'helpdesk',
            'pager': pager,
            'default_url': '/my/helpdesk',
        })

    @http.route(['/my/helpdesk/ticket/<int:ticket_id>'], type='http', auth='user', website=True)
    def portal_helpdesk_ticket_detail(self, ticket_id, **kw):
        ticket = request.env['so.helpdesk.ticket'].browse(ticket_id)
        if ticket.partner_id != request.env.user.partner_id:
            return request.redirect('/my')
        return request.render('so_helpdesk.portal_ticket_page', {
            'ticket': ticket,
            'page_name': 'helpdesk',
        })

    @http.route(['/helpdesk/submit'], type='http', auth='public', website=True, methods=['GET', 'POST'], csrf=True)
    def helpdesk_submit_ticket(self, **post):
        teams = request.env['so.helpdesk.team'].sudo().search([('active', '=', True)])
        ticket_types = request.env['so.helpdesk.ticket.type'].sudo().search([('active', '=', True)])
        if request.httprequest.method == 'POST':
            ticket = request.env['so.helpdesk.ticket'].sudo().create({
                'name': post.get('name'),
                'team_id': int(post.get('team_id')) if post.get('team_id') else False,
                'ticket_type_id': int(post.get('ticket_type_id')) if post.get('ticket_type_id') else False,
                'partner_id': request.env.user.partner_id.id if not request.env.user._is_public() else False,
                'partner_email': post.get('partner_email'),
                'partner_phone': post.get('partner_phone'),
                'description': post.get('description'),
                'priority': post.get('priority', '1'),
            })
            return request.render('so_helpdesk.helpdesk_submit_thanks', {'ticket': ticket})
        return request.render('so_helpdesk.helpdesk_submit_form', {
            'teams': teams,
            'ticket_types': ticket_types,
        })
