package graph_queries

import (
	"fmt"

	"visualizador_instanciados/backend_go/queryscope"
)

func typesOnlyEdgeQuery(limit int, offset int, includeBNodes bool) string {
	bnodeFilter := ""
	if !includeBNodes {
		bnodeFilter = "FILTER(!isBlank(?s) && !isBlank(?o))"
	}

	pattern := queryscope.NamedGraph(`
VALUES ?p { rdf:type }
?s ?p ?o .
`)

	return fmt.Sprintf(`
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

SELECT DISTINCT ?s ?p ?o
WHERE {
%s
  FILTER(!isLiteral(?o))
  %s
}
ORDER BY ?s ?p ?o
LIMIT %d
OFFSET %d
`, pattern, bnodeFilter, limit, offset)
}

func typesOnlyPredicateQuery(includeBNodes bool) string {
	bnodeFilter := ""
	if !includeBNodes {
		bnodeFilter = "FILTER(!isBlank(?s) && !isBlank(?o))"
	}

	pattern := queryscope.NamedGraph(`
VALUES ?p { rdf:type }
?s ?p ?o .
`)

	return fmt.Sprintf(`
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

SELECT DISTINCT ?p
WHERE {
%s
  FILTER(!isLiteral(?o))
  %s
}
ORDER BY ?p
`, pattern, bnodeFilter)
}
