# Part of Odoo. See LICENSE file for full copyright and licensing details.

from odoo import api, fields, models
import logging

_logger = logging.getLogger(__name__)


class StockMove(models.Model):
    _inherit = "stock.move"
    _description = "Stock Move Ewaybill"

    l10n_in_ewaybill_ids = fields.One2many(related='picking_id.l10n_in_ewaybill_ids')
    company_currency_id = fields.Many2one(related='company_id.currency_id')

    # Need to store values because we send it to the ewaybill and we need to keep the same value
    ewaybill_price_unit = fields.Monetary(
        compute='_compute_l10n_in_ewaybill_price_unit',
        currency_field='company_currency_id',
        store=True,
        readonly=False
    )
    ewaybill_tax_ids = fields.Many2many(
        comodel_name='account.tax',
        string="Taxes",
        compute='_compute_l10n_in_tax_ids',
        store=True,
        readonly=False
    )

    @api.depends('l10n_in_ewaybill_ids')
    def _compute_l10n_in_ewaybill_price_unit(self):
        for line in self:
            ewaybill = line.l10n_in_ewaybill_ids and line.l10n_in_ewaybill_ids[0]
            if ewaybill.state == 'pending' and line.picking_id.country_code == 'IN':
                line.ewaybill_price_unit = line._l10n_in_get_product_price_unit()

    @api.depends('l10n_in_ewaybill_ids.fiscal_position_id')
    def _compute_l10n_in_tax_ids(self):
        for line in self:
            ewaybill = line.l10n_in_ewaybill_ids and line.l10n_in_ewaybill_ids[0]
            if ewaybill.state == 'pending' and line.picking_id.country_code == 'IN':
                taxes_details = line._l10n_in_get_product_tax()
                taxes = taxes_details['taxes']
                if taxes_details['is_from_order']:
                    # Don't map taxes if they are from sale/purchase order
                    line.ewaybill_tax_ids = taxes
                else:
                    if fiscal_position := ewaybill.fiscal_position_id:
                        taxes = fiscal_position.map_tax(taxes)
                    line.ewaybill_tax_ids = taxes.filtered_domain(
                        self.env['account.tax']._check_company_domain(self.company_id)
                    )
