from typing import Optional
from src.domain.entities.merchant import MerchantLocation
from src.domain.interfaces.merchant_repository import MerchantRepositoryInterface

class UpdateMerchantLocationUseCase:
    def __init__(self, repository: MerchantRepositoryInterface):
        self.repository = repository

    def execute(self, location_id: int, location_data: dict) -> Optional[MerchantLocation]:
        # Filter supported fields
        allowed_fields = {
            'name', 'email', 'phone', 'location', 'gst_number', 'state', 
            'pincode', 'city', 'landmark', 'total_revenue_per_month', 
            'percentage_of_sales_in_emi', 'number_of_lenders', 'number_of_visits'
        }
        
        filtered_data = {k: v for k, v in location_data.items() if k in allowed_fields}
        
        # 'address' from entity is 'location' in repository/model
        if 'address' in location_data:
            filtered_data['location'] = location_data['address']

        return self.repository.update_location(location_id, filtered_data)
