import { Injectable } from '@nestjs/common'
import { DataSource } from 'typeorm'
import { AppLoggerService } from 'src/common/services/logger.service'
import { ReportFieldDef } from './types/report-field.types'

@Injectable()
export class ReportsRepository {
  constructor(
    private readonly dataSource: DataSource,
    private readonly logger: AppLoggerService,
  ) {}

  async getAllFieldDefinitions(): Promise<ReportFieldDef[]> {
    return this.dataSource.query<ReportFieldDef[]>('SELECT * FROM fn_get_report_field_definitions()')
  }

  async fetchReportRows(cols: string, filtersJson: string): Promise<Record<string, unknown>[]> {
    const sql = `SELECT ${cols} FROM fn_generate_registration_report($1) ORDER BY "registrationDate" DESC NULLS LAST`
    this.logger.debug('Report SQL', { sql, filters: filtersJson })
    return this.dataSource.query<Record<string, unknown>[]>(sql, [filtersJson])
  }
}
