from odoo import api, models


class ResCurrency(models.Model):
    _inherit = "res.currency"

    @api.model
    def get_currencies_for_spreadsheet(self, currency_names):
        """
        Returns the currency structure of provided currency names.
        This function is meant to be called by the spreadsheet js lib,
        hence the formatting of the result.

        :currency_names list(str): list of currency names (e.g.  ["EUR", "USD", "CAD"])
        :return: list of dicts of the form `{ "code": str, "symbol": str, "decimalPlaces": int, "position":str }`
        """
        currencies = self.with_context(active_test=False).search(
            [("name", "in", currency_names)],
        )
        result = []
        for currency_name in currency_names:
            currency = next(filter(lambda curr: curr.name == currency_name, currencies), None)
            if currency:
                currency_data = {
                    "code": currency.name,
                    "symbol": currency.symbol,
                    "decimalPlaces": currency.decimal_places,
                    "position": currency.position,
                }
            else:
                currency_data = None
            result.append(currency_data)
        return result

    @api.model
    def get_company_currency_for_spreadsheet(self, company_id=None):
        """
        Returns the currency structure for the currency of the company.
        This function is meant to be called by the spreadsheet js lib,
        hence the formatting of the result.

        :company_id int: Id of the company
        :return: dict of the form `{ "code": str, "symbol": str, "decimalPlaces": int, "position":str }`
        """
        company = self.env["res.company"].browse(company_id) if company_id else self.env.company
        if not company.exists():
            return False
        currency = company.currency_id
        return {
            "code": currency.name,
            "symbol": currency.symbol,
            "decimalPlaces": currency.decimal_places,
            "position": currency.position,
        }
