import { TableQueryBuilder } from "@/lib/database/table-query-builder";
import { PoolConnection, RowDataPacket } from "mysql2/promise";

export class TableService {
  constructor(private connection: PoolConnection) {}

  async query(options: TableQueryOptions) {
    try {
      const queryBuilder = new TableQueryBuilder(options);

      // Build and execute main query
      const { query } = await queryBuilder.build();
      const [result] = await this.connection.query<RowDataPacket[]>(
        query,
        options.params,
      );

      return {
        operation: true,
        data: result,
      };
    } catch (error) {
      return {
        operation: false,
        message: `Error fetching data of ${options.table}`,
      };
    }
  }
}
