/*
 *******************************************************************************
 * Copyright (c) 2019 Contributors to the Eclipse Foundation
 *
 * See the NOTICE file(s) distributed with this work for additional
 * information regarding copyright ownership.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * SPDX-License-Identifier: EPL-2.0
 *******************************************************************************
 */
package org.eclipse.openk.contactbasedata.service;

import lombok.extern.log4j.Log4j2;
import org.eclipse.openk.contactbasedata.mapper.ContactMapper;
import org.eclipse.openk.contactbasedata.model.VwDetailedContact;
import org.eclipse.openk.contactbasedata.repository.ContactRepository;
import org.eclipse.openk.contactbasedata.repository.DetailedContactRepository;
import org.eclipse.openk.contactbasedata.service.util.SearchContactsFilterParams;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import java.time.Instant;
import java.util.Date;

@Log4j2
@Service
public class ContactService {
    @Autowired
    private DetailedContactRepository detailedContactRepository;
    @Autowired
    private ContactRepository contactRepository;
    @Autowired
    private ContactMapper contactMapper;

    public Page<VwDetailedContact> findDetailedContacts(
            SearchContactsFilterParams searchContactsFilterParams,
            Pageable pageable) {
            return detailedContactRepository.findByFilter(
                    searchContactsFilterParams.getContactType(),
                    searchContactsFilterParams.getPersonTypeUuid(),
                    searchContactsFilterParams.getSearchText() != null ? searchContactsFilterParams.getSearchText().toUpperCase() : null,
                    searchContactsFilterParams.getModuleName(),
                    searchContactsFilterParams.isWithoutModule(),
                    Date.from(Instant.now()),
                    searchContactsFilterParams.isExpiringDataInPast(),
                    searchContactsFilterParams.isDelLockExceeded(),
                    searchContactsFilterParams.isShowAnonymized(),
                    pageable);
    }

}
