import { Router } from "express";
import { BeneficiaryController } from "./beneficiary.controller";
import { BeneficiaryService } from "./beneficiary.service";
import { validateRequest } from "@middlewares/validation.middleware";
import { CreateBeneficiarySchema, UpdateBeneficiarySchema } from "./dto/beneficiary.dto";
import { authenticateToken } from "@middlewares/auth.middleware";

export class BeneficiaryRoute {
    public router: Router;
    private beneficiaryController: BeneficiaryController;

    constructor() {
        this.router = Router();
        this.beneficiaryController = new BeneficiaryController(new BeneficiaryService());
        this.initializeRoutes();
    }

    private initializeRoutes() {
        this.router.post(
            "/",
            authenticateToken,
            validateRequest(CreateBeneficiarySchema),
            this.beneficiaryController.create
        );
        this.router.get("/", this.beneficiaryController.findAll);
        this.router.get("/:id", this.beneficiaryController.findOne);
        this.router.put(
            "/:id",
            validateRequest(UpdateBeneficiarySchema),
            this.beneficiaryController.update
        );
        this.router.delete("/:id", this.beneficiaryController.delete);
    }
}
