// graphql-publishing/src/cypher/songwriter/getAll/user/songwriterFilters.cypher

CASE WHEN
    $label IS NOT NULL THEN l.uuid = $label.uuid ELSE true
END
AND
CASE WHEN
    $legalNameSearch IS NOT NULL THEN
        toLower(sw.legalName) CONTAINS toLower($legalNameSearch)
        OR ($legalNameAndIpiSearch AND toLower(sw.ipi) CONTAINS toLower($legalNameSearch))
        // when we have same values for legalName and PKA we do OR search between this 2 conditions so PKA condition is copied here
        OR ($legalNameSearch = $professionallyKnownAs AND ANY(value IN sw.professionallyKnownAs WHERE toLower(value) CONTAINS toLower($professionallyKnownAs)))
    ELSE true
END
AND ($pubWriterIDs IS NULL OR sw.pubWriterID IN $pubWriterIDs)
AND ($ipi is NULL OR sw.ipi = $ipi)
AND
CASE WHEN
    $professionallyKnownAs IS NOT NULL THEN
        ANY(value IN sw.professionallyKnownAs WHERE toLower(value) CONTAINS toLower($professionallyKnownAs))
        // when we have same values for legalName and PKA we do OR search between this 2 conditions so legalNameSearch condition is copied here
        OR ($legalNameSearch = $professionallyKnownAs AND (
            toLower(sw.legalName) CONTAINS toLower($legalNameSearch)
            OR ($legalNameAndIpiSearch AND toLower(sw.ipi) CONTAINS toLower($legalNameSearch))
        ))
    ELSE true
END
