/*
 *******************************************************************************
 * 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.repository;

import org.eclipse.openk.contactbasedata.model.VwDetailedContact;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;

import java.util.UUID;

public interface DetailedContactRepository extends PagingAndSortingRepository<VwDetailedContact, Long> {
    Page<VwDetailedContact> findAll(Pageable pageable);


    @Query( "select dc from VwDetailedContact dc "
            + "left outer join TblAssignmentModulContact ass on"
            + " ass.tblContact.id = dc.fkContactId"
            + " where (COALESCE(:contactType) is null or COALESCE(:contactType) is not null AND dc.contactType=:contactType)"
            + " and (COALESCE(:personType) is null or COALESCE(:personType) is not null AND dc.personTypeUuid=:personType)"
            + " and (COALESCE(:searchText) is null or COALESCE(:searchText) is not null AND dc.searchfield like %:searchText%)"
            + " and (COALESCE(:moduleName) is null or COALESCE(:moduleName) is not null AND ass.modulName = :moduleName)"
            + " and (COALESCE(:withoutModule) = false or COALESCE(:withoutModule) = true AND ass is null)"
    )
    Page<VwDetailedContact> findByFilter(@Param("contactType")String contactType,
                                         @Param("personType") UUID personType,
                                         @Param("searchText") String searchText,
                                         @Param("moduleName") String moduleName,
                                         @Param("withoutModule") boolean withoutModule,
                                         Pageable pageable);


    @Query( "select dc from VwDetailedContact AS dc"
            + ", TblContact AS c "
            + "inner join c.assignments a where "
            + "dc.fkContactId = c.id and"
            + "(COALESCE(:modulName) is null or COALESCE(:modulName) is not null AND a.modulName =:modulName) and"
            + "(COALESCE(:searchText) is null or COALESCE(:searchText) is not null AND dc.searchfield LIKE CONCAT ('%', :searchText , '%'))")
    Page<VwDetailedContact> findByModulName(@Param("modulName")String modulName, @Param("searchText")String searchText, Pageable pageable);
}

