package com.erp.customer.service;

import com.erp.customer.dto.CustomerCreateRequest;
import com.erp.customer.dto.CustomerUpdateRequest;
import com.erp.customer.entity.Customer;

import java.util.List;

/**
 * 客户Service接口
 */
public interface CustomerService {
    
    /**
     * 分页查询客户列表
     */
    List<Customer> listCustomers(Long tenantId, String level, String status, String keyword, 
                                  Long salesId, Integer page, Integer size);
    
    /**
     * 根据ID获取客户详情
     */
    Customer getCustomerById(Long id);
    
    /**
     * 根据客户编码获取
     */
    Customer getCustomerByCode(String customerCode);
    
    /**
     * 创建客户
     */
    Customer createCustomer(CustomerCreateRequest request);
    
    /**
     * 更新客户
     */
    Customer updateCustomer(Long id, CustomerUpdateRequest request);
    
    /**
     * 删除客户（逻辑删除）
     */
    void deleteCustomer(Long id);
    
    /**
     * 切换客户状态
     */
    Customer toggleCustomerStatus(Long id);
    
    /**
     * 更新客户等级
     */
    Customer updateCustomerLevel(Long id, String level);
    
    /**
     * 查询客户的所有分店
     */
    List<Customer> getCustomerBranches(Long customerId);
    
    /**
     * 查询客户的上级（总店）
     */
    Customer getCustomerParent(Long customerId);
    
    /**
     * 查询超过指定天数未联系客户
     */
    List<Customer> getLongTimeNoContactCustomers(Long tenantId, Integer days);
    
    /**
     * 获取VIP客户列表
     */
    List<Customer> getTopVipCustomers(Long tenantId, Integer limit);
    
    /**
     * 更新客户余额
     */
    Customer updateCustomerBalance(Long id, java.math.BigDecimal amount);
    
    /**
     * 添加客户余额
     */
    Customer addCustomerBalance(Long id, java.math.BigDecimal amount);
    
    /**
     * 扣减客户余额
     */
    Customer deductCustomerBalance(Long id, java.math.BigDecimal amount);
    
    /**
     * 更新最近联系时间
     */
    void updateLastContactTime(Long id);
    
    /**
     * 更新成交时间
     */
    void updateDealTime(Long id);
}
