from odoo import models, api


class AccountJournal(models.Model):
    _inherit = "account.journal"

    def _default_outbound_payment_methods(self):
        res = super()._default_outbound_payment_methods()
        if self.company_id.country_id.code != "AR":
            return res
        if self._is_payment_method_available('own_checks'):
            res |= self.env.ref('l10n_latam_check.account_payment_method_own_checks')
        if self._is_payment_method_available('out_third_party_checks'):
            res |= self.env.ref('l10n_latam_check.account_payment_method_out_third_party_checks')
        if self._is_payment_method_available('return_third_party_checks'):
            res |= self.env.ref('l10n_latam_check.account_payment_method_return_third_party_checks')
        return res

    @api.model
    def _get_reusable_payment_methods(self):
        """ We are able to have multiple times Checks payment method in a journal """
        res = super()._get_reusable_payment_methods()
        res.add("own_checks")
        return res

    def create(self, vals_list):
        journals = super().create(vals_list)
        inbound_payment_accounts = self.env['account.account'].search([
            ('code', '=', '1.1.1.02.003'),
            ('company_ids', 'in', journals.company_id.ids)
        ]).grouped('company_ids')

        outbound_payment_accounts = self.env['account.account'].search([
            ('code', '=', '1.1.1.02.004'),
            ('company_ids', 'in', journals.company_id.ids)
        ]).grouped('company_ids')

        for journal in journals:
            if journal.country_code != 'AR' or journal.type not in ('bank', 'cash'):
                continue

            for payment_method_line in journal.inbound_payment_method_line_ids:
                if payment_method_line.payment_account_id:
                    continue
                payment_method_line.payment_account_id = inbound_payment_accounts.get(journal.company_id)

            for payment_method_line in journal.outbound_payment_method_line_ids:
                if payment_method_line.payment_account_id:
                    continue
                payment_method_line.payment_account_id = outbound_payment_accounts.get(journal.company_id)

        return journals
