// decorators/resource.decorator.ts
import { applyDecorators, UseGuards } from '@nestjs/common';
import { Resource, RequirePermission, RequireMember, RequireAdmin, RequireOwner } from './permission.decorator';

/**
 * Decorator cho Map resource
 */
export const MapResource = (idSource: 'param' | 'query' | 'body' = 'param') =>
  Resource('map', idSource);

/**
 * Decorator cho Trip resource
 */
export const TripResource = (idSource: 'param' | 'query' | 'body' = 'param') =>
  Resource('trip', idSource);

/**
 * Decorator cho Group resource
 */
export const GroupResource = (idSource: 'param' | 'query' | 'body' = 'param') =>
  Resource('group', idSource);

/**
 * Kết hợp decorator cho Map với Member permission
 */
export const MapMember = () =>
  applyDecorators(
    MapResource(),
    RequireMember(),
  );

/**
 * Kết hợp decorator cho Map với Admin permission
 */
export const MapAdmin = () =>
  applyDecorators(
    MapResource('body'),
    RequireAdmin(),
  );

/**
 * Kết hợp decorator cho Trip với Member permission
 */
export const TripMember = () =>
  applyDecorators(
    TripResource(),
    RequireMember(),
  );

/**
 * Kết hợp decorator cho Trip với Admin permission
 */
export const TripAdmin = () =>
  applyDecorators(
    TripResource(),
    RequireAdmin(),
  );

/**
 * Kết hợp decorator cho Group với Admin permission
 */
export const GroupAdmin = () =>
  applyDecorators(
    GroupResource(),
    RequireAdmin(),
  );

/**
 * Kết hợp decorator cho Group với Owner permission
 */
export const GroupOwner = () =>
  applyDecorators(
    GroupResource(),
    RequireOwner(),
  );