package consulta

import (
	"context"
	"database/sql"
	"fmt"
	"strings"

	"gitlab.com/sistema-pro/xmlcolibex/internal/banco"
)

func ListarIDsImoveisMarcados(ctx context.Context, db *sql.DB, idsConfig []int, idMaster int) ([]int, error) {
	if len(idsConfig) == 0 {
		return nil, nil
	}
	ph := strings.TrimRight(strings.Repeat("?,", len(idsConfig)), ",")
	args := make([]any, 0, len(idsConfig)+1)
	for _, id := range idsConfig {
		args = append(args, id)
	}
	args = append(args, idMaster)
	q := fmt.Sprintf(`
SELECT DISTINCT xi.imovel
FROM xml_imoveis xi
INNER JOIN imoveis i ON xi.imovel = i.id_imovel AND xi.id_master = i.id_master
WHERE xi.id_xml_config IN (%s) AND xi.id_master = ? AND i.status = 'Ativo'`, ph)

	var ids []int
	err := banco.Retentar(3, func() error {
		rows, err := db.QueryContext(ctx, q, args...)
		if err != nil {
			return err
		}
		defer rows.Close()
		ids = ids[:0]
		for rows.Next() {
			var id int
			if err := rows.Scan(&id); err != nil {
				return err
			}
			ids = append(ids, id)
		}
		return rows.Err()
	})
	return ids, err
}
