/*
 *******************************************************************************
 * 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.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import java.util.UUID;

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

    public Page<VwDetailedContact> findDetailedContacts(String contactType,
                                                        UUID personTypeUuid,
                                                        String searchText,
                                                        String moduleName,
                                                        boolean withoutModule,
                                                        Pageable pageable) {

        if( contactType == null &&
                personTypeUuid == null &&
                searchText == null &&
                moduleName == null &&
                !withoutModule) {
            return detailedContactRepository.findAll(pageable);
        }
        else {
            return detailedContactRepository.findByFilter( contactType,
                    personTypeUuid,
                    searchText != null ? searchText.toUpperCase() : null,
                    moduleName,
                    withoutModule,
                    pageable);
        }
    }

    public Page<VwDetailedContact> findDetailedContactsByModulName(String  modulName, String searchText, Pageable pageable) {
        return detailedContactRepository.findByModulName(modulName, searchText, pageable);
    }

}
