import { Body, Controller, Get, Param, Patch, Post, Query, UseGuards } from "@nestjs/common";
import { Tenant } from "../../common/decorators/tenant.decorator";
import { JwtAuthGuard } from "../../common/guards/jwt-auth.guard";
import { CreatePayableDto } from "./dto/create-payable.dto";
import { CreateReceivableDto } from "./dto/create-receivable.dto";
import { FinanceQueryDto } from "./dto/finance-query.dto";
import { PayEntryDto } from "./dto/pay-entry.dto";
import { FinanceService } from "./finance.service";

@UseGuards(JwtAuthGuard)
@Controller("finance")
export class FinanceController {
  constructor(private readonly financeService: FinanceService) {}

  @Get("stats")
  getStats(@Tenant() companyId: string) {
    return this.financeService.getStats(companyId);
  }

  @Get("receivables")
  getReceivables(@Tenant() companyId: string, @Query() query: FinanceQueryDto) {
    return this.financeService.getReceivables(companyId, query);
  }

  @Get("payables")
  getPayables(@Tenant() companyId: string, @Query() query: FinanceQueryDto) {
    return this.financeService.getPayables(companyId, query);
  }

  @Get("cash-flow")
  getCashFlow(@Tenant() companyId: string, @Query() query: FinanceQueryDto) {
    return this.financeService.getCashFlow(companyId, query);
  }

  @Post("receivables")
  createReceivable(@Tenant() companyId: string, @Body() dto: CreateReceivableDto) {
    return this.financeService.createReceivable(companyId, dto);
  }

  @Post("payables")
  createPayable(@Tenant() companyId: string, @Body() dto: CreatePayableDto) {
    return this.financeService.createPayable(companyId, dto);
  }

  @Patch("receivables/:id/pay")
  payReceivable(
    @Tenant() companyId: string,
    @Param("id") id: string,
    @Body() dto: PayEntryDto
  ) {
    return this.financeService.payReceivable(companyId, id, dto);
  }

  @Patch("payables/:id/pay")
  payPayable(
    @Tenant() companyId: string,
    @Param("id") id: string,
    @Body() dto: PayEntryDto
  ) {
    return this.financeService.payPayable(companyId, id, dto);
  }
}
