package com.ecep.contract.service;

import java.util.List;

import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import com.ecep.contract.util.ParamUtils;
import com.ecep.contract.vo.VendorEntityVo;
import com.ecep.contract.vo.VendorVo;
import com.ecep.contract.vm.CompanyVendorEntityViewModel;

@Service
public class VendorEntityService extends QueryService<VendorEntityVo, CompanyVendorEntityViewModel> {
    
    /**
     * 根据供应商ID查询关联实体列表
     */
    public List<VendorEntityVo> findByVendorId(Integer vendorId) {
        return findAll(ParamUtils.builder().equals("vendorId", vendorId).build(), Pageable.unpaged())
                .getContent();
    }
    
    /**
     * 根据CompanyVendor对象查询关联的CompanyVendorEntity列表
     */
    public List<VendorEntityVo> findByVendor(VendorVo vendor) {
        return findByVendorId(vendor.getId());
    }
    
    /**
     * 根据供应商ID创建新的CompanyVendorEntity实例
     */
    public VendorEntityVo newInstanceByVendor(VendorVo vendor) {
        VendorEntityVo entity = createNewEntity();
        // 设置供应商ID
        try {
            // 通过反射设置vendor属性，因为实体类中可能没有直接的setVendorId方法
            entity.getClass().getMethod("setVendorId", Integer.class).invoke(entity, vendor.getId());
        } catch (Exception e) {
            // 如果反射失败，尝试其他方式或记录错误
            throw new RuntimeException("Failed to set vendor ID", e);
        }
        return entity;
    }
    
    @Override
    public String getBeanName() {
        // 确保返回正确的服务名称
        return "vendorEntityService";
    }
}
