import { Request, Response } from "express";
import { sendSuccess } from "../../common/utils/api-response";
import * as paymentService from "./payment.service";

export async function createCheckoutSession(req: Request, res: Response) {
  const result = await paymentService.createCheckoutSession(
    req.user!.id,
    req.params.invoiceId,
  );
  sendSuccess(res, result);
}

export async function getClientInvoice(req: Request, res: Response) {
  const result = await paymentService.getClientInvoice(
    req.user!.id,
    req.params.invoiceId,
  );
  sendSuccess(res, result);
}

export async function getAdminInvoice(req: Request, res: Response) {
  const result = await paymentService.getAdminInvoice(req.params.invoiceId);
  sendSuccess(res, result);
}

export async function getAdminTransactions(req: Request, res: Response) {
  const page = Number(req.query.page) || 1;
  const limit = Number(req.query.limit) || 20;
  const status = req.query.status as string | undefined;
  const result = await paymentService.getAdminTransactions(req.user!.id, page, limit, status);
  sendSuccess(res, result);
}

export async function getClientTransactions(req: Request, res: Response) {
  const page = Number(req.query.page) || 1;
  const limit = Number(req.query.limit) || 20;
  const status = req.query.status as string | undefined;
  const result = await paymentService.getClientTransactions(req.user!.id, page, limit, status);
  sendSuccess(res, result);
}

export async function stripeWebhook(req: Request, res: Response) {
  await paymentService.handleStripeWebhook(req);
  res.json({ received: true });
}
