import { Hono } from "hono";
import { withConsoleUserSession } from "@/middlewares/withConsoleUserSession";
import { withConsoleUserRole } from "@/middlewares/console-role";
import { MemberOfferController } from "@/controllers/admin/member-offers/member-offers.controller";

export const MemberOfferRoutes = new Hono();

MemberOfferRoutes.get(
  "/meta/edm-templates",
  withConsoleUserSession(),
  withConsoleUserRole("member-offers", "read"),
  async (ctx) => MemberOfferController(ctx).GetEDMTemplates(),
);

MemberOfferRoutes.get(
  "/meta/account-types",
  withConsoleUserSession(),
  withConsoleUserRole("member-offers", "read"),
  async (ctx) => MemberOfferController(ctx).GetAccountTypes(),
);

MemberOfferRoutes.get(
  "/meta/account-statuses",
  withConsoleUserSession(),
  withConsoleUserRole("member-offers", "read"),
  async (ctx) => MemberOfferController(ctx).GetAccountStatuses(),
);

MemberOfferRoutes.get(
  "/meta/clubs",
  withConsoleUserSession(),
  withConsoleUserRole("member-offers", "read"),
  async (ctx) => MemberOfferController(ctx).GetClubs(),
);

MemberOfferRoutes.get(
  "/",
  withConsoleUserSession(),
  withConsoleUserRole("member-offers", "read"),
  async (ctx) => MemberOfferController(ctx).ListMemberOffers(),
);

MemberOfferRoutes.post(
  "/",
  withConsoleUserSession(),
  withConsoleUserRole("member-offers", "create"),
  async (ctx) => MemberOfferController(ctx).CreateMemberOffer(),
);

MemberOfferRoutes.get(
  "/:id",
  withConsoleUserSession(),
  withConsoleUserRole("member-offers", "read"),
  async (ctx) => MemberOfferController(ctx).GetMemberOffer(),
);

MemberOfferRoutes.put(
  "/:id",
  withConsoleUserSession(),
  withConsoleUserRole("member-offers", "update"),
  async (ctx) => MemberOfferController(ctx).UpdateMemberOffer(),
);

MemberOfferRoutes.delete(
  "/:id",
  withConsoleUserSession(),
  withConsoleUserRole("member-offers", "delete"),
  async (ctx) => MemberOfferController(ctx).DeleteMemberOffer(),
);

MemberOfferRoutes.post(
  "/:id/publish",
  withConsoleUserSession(),
  withConsoleUserRole("member-offers", "update"),
  async (ctx) => MemberOfferController(ctx).PublishMemberOffer(),
);

MemberOfferRoutes.post(
  "/:id/archive",
  withConsoleUserSession(),
  withConsoleUserRole("member-offers", "update"),
  async (ctx) => MemberOfferController(ctx).ArchiveMemberOffer(),
);

MemberOfferRoutes.post(
  "/:id/duplicate",
  withConsoleUserSession(),
  withConsoleUserRole("member-offers", "create"),
  async (ctx) => MemberOfferController(ctx).DuplicateMemberOffer(),
);
