package com.viettel.campaign.service;

import com.viettel.campaign.model.ccms_full.Customer;
import com.viettel.campaign.model.ccms_full.CustomerList;
import com.viettel.campaign.web.dto.*;
import com.viettel.campaign.web.dto.request_dto.CustomerRequestDTO;
import com.viettel.campaign.web.dto.request_dto.SearchCustomerRequestDTO;

import java.io.File;
import java.util.Date;
import java.util.List;

import java.util.List;

public interface CustomerService {

    ResultDTO getAllCustomer(int page, int pageSize, String sort, long customerListId, long companySiteId);

    ResultDTO getCustomerId(Long customerId);

    ResultDTO searchAllCustomer(int page, int pageSize, String sort, long customerListId, long companySiteId, String name, String mobileNumber, String email);

    ResultDTO createCustomer(CustomerDTO customerDTO);

    ResultDTO deleteCustomer(CustomerRequestDTO customerRequestDTO);

    ResultDTO deleteIds(CustomerRequestDTO customerRequestDTO);

    ResultDTO getCustomerDetailById(Long companySiteId, Long customerListId, Long customerId);

    // ------------ customer list ------------ //

    ResultDTO getAllCustomerList(int page, int pageSize, String sort, Long companySiteId);

    ResultDTO createCustomerList(CustomerListDTO customerListDTO);

    ResultDTO updateCustomerList(CustomerListDTO customerListDTO);

    ResultDTO deleteCustomerList(CustomerListDTO customerListDTO);

    ResultDTO deleteCustomerListIds(CustomerRequestDTO customerRequestDTO);

    ResultDTO searchCustomerList(SearchCustomerRequestDTO searchCustomerRequestDTO);

    CustomerList getLatestCreated(Long companySiteId);

    // ------------ customer contact ------------ //

    ResultDTO getCustomerContact(CustomerContactDTO customer);

    // danh sach khach hang cua chien dich //

    List<CustomerListDTO> getCustomerListInfo(CampaignCustomerDTO campaignCustomerDTO);

    List<CustomerDTO> getIndividualCustomerInfo(CampaignCustomerDTO campaignCustomerDTO);


    // ------------ customer  ------------ //

    ResultDTO getCustomerRecall(Long campaignId, Long customerId);

    List<Customer> findAllByCondition(Long siteId, Date endTime);
    Customer update(Customer c);

    List<DynamicExcelHeaderDTO> getDynamicHeader(Long companySiteId);

    void buildTemplate(Long companySiteId);

    List<CustomizeFieldDTO> getCustomizeField(Long customerId);
}
