# Copyright 2023 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

import logging

from odoo.tools import sql

_logger = logging.getLogger(__name__)


def pre_init_hook(cr):
    """Initialize picking_kind field based on location_id and location_dest_id"""
    if not sql.column_exists(cr, "stock_picking", "picking_kind"):
        _logger.info("Create picking_kind column")
        cr.execute(
            """
            ALTER TABLE stock_picking
            ADD COLUMN picking_kind character varying;
        """
        )
        _logger.info("Initialize picking_kind field")
        cr.execute(
            """
            UPDATE stock_picking
            SET picking_kind = (
                CASE
                    WHEN
                        origin.usage = 'supplier'
                        AND destination.usage = 'customer'
                    THEN 'drop_shipping'
                    WHEN
                        origin.usage = 'customer'
                        AND destination.usage = 'supplier'
                    THEN 'drop_shipping_return'
                    WHEN
                        origin.usage = 'customer'
                        AND destination.usage != 'customer'
                    THEN 'customer_return'
                    WHEN
                        origin.usage != 'customer'
                        AND destination.usage = 'customer'
                    THEN 'customer_out'
                    WHEN
                        origin.usage = 'supplier'
                        AND destination.usage != 'supplier'
                    THEN 'supplier_in'
                    WHEN
                        origin.usage != 'supplier'
                        AND destination.usage = 'supplier'
                    THEN 'supplier_return'
                    ELSE NULL
                END
            )
            FROM stock_location origin, stock_location destination
            WHERE stock_picking.location_id = origin.id
            AND stock_picking.location_dest_id = destination.id
        """
        )
        _logger.info(f"{cr.rowcount} rows updated")
