import {
  CallHandler,
  ExecutionContext,
  Injectable,
  NestInterceptor,
} from "@nestjs/common"
import { Observable } from "rxjs"
import { tap } from "rxjs/operators"
import * as moment from "moment"

@Injectable()
export class ExcelDownloadInterceptor implements NestInterceptor {
  constructor(private readonly fileName: string) {}

  intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
    const res = context.switchToHttp().getResponse()
    const todayDate = moment.default().format("YYYY-MM-DD")

    // Set the necessary headers for Excel file download
    res.setHeader(
      "Content-Disposition",
      `attachment; filename="${this.fileName}-${todayDate}.xlsx"`,
    )
    res.setHeader(
      "Content-Type",
      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
    )

    return next.handle().pipe(
      // eslint-disable-next-line @typescript-eslint/no-unused-vars
      tap((data) => {
        // You can also add custom logic here if needed (e.g., logging, processing data)
      }),
    )
  }
}
