import {
  BaseEntity,
  Column,
  Entity,
  OneToMany,
  PrimaryGeneratedColumn,
} from 'typeorm';
import { RoleMapPermissionEntity } from './role-map-permission.entity';

export enum PermissionsType {
  ADD_USER = 'ADD_USER',
  GET_USER = 'GET_USER',
  UPDATE_USER = 'UPDATE_USER',
  UPDATE_WALLET_USER = 'UPDATE_WALLET_USER',
  DELETE_USER = 'DELETE_USER',
  GET_USER_STATISTICS = 'GET_USER_STATISTICS',

  UPDATE_ROLE = 'UPDATE_ROLE',
  ADD_ROLE = 'ADD_ROLE',
  GET_ROLE = 'GET_ROLE',

  UPDATE_TICKET = 'UPDATE_TICKET',
  GET_TICKET = 'GET_TICKET',
  REPLY_TICKET = 'REPLY_TICKET',
  GET_TICKET_STATISTICS = 'GET_TICKET_STATISTICS',

  UPDATE_SITE_INFO = 'UPDATE_SITE_INFO',
  GET_SITE_INFO = 'GET_SITE_INFO',

  ASSIGN_SERVICE_TO_SERVICEMAN = 'ASSIGN_SERVICE_TO_SERVICEMAN',

  UPDATE_ORDER_STATUS = 'UPDATE_ORDER_STATUS',

  // ثبت سرویس جدید
  ADD_SERVICE = 'ADD_SERVICE',
  EXPORT_EXCEL_FROM_SERVICE_REMINDER = 'EXPORT_EXCEL_FROM_SERVICE_REMINDER',

  // ثبت سفارش فروشگاه جدید
  ADD_SHOP_ORDER = 'ADD_SHOP_ORDER',

  // مشاهده لیست سفارشات سرویس و فروشگاه
  GET_ORDER = 'GET_ORDER',

  GET_ORDER_STATISTICS_BY_SERVICEMAN = 'GET_ORDER_STATISTICS_BY_SERVICEMAN',
  GET_ALL_ORDER_STATISTICS = 'GET_ALL_ORDER_STATISTICS',

  // مشاهده لیست خدمات توسط سرویسکار
  GET_SERVICE_BY_SERVICEMAN = 'GET_SERVICE_BY_SERVICEMAN',

  UPDATE_SERVICE_REMINDER = 'UPDATE_SERVICE_REMINDER',
  GET_SERVICE_REMINDER = 'GET_SERVICE_REMINDER',

  GET_SERVICE_TIME = 'GET_SERVICE_TIME',
  UPDATE_SERVICE_TIME = 'UPDATE_SERVICE_TIME',
  ADD_SERVICE_TIME = 'ADD_SERVICE_TIME',
  DELETE_SERVICE_TIME = 'DELETE_SERVICE_TIME',

  DELETE_PRODUCT_ATTRIBUTE = 'DELETE_PRODUCT_ATTRIBUTE',
  ADD_PRODUCT_ATTRIBUTE = 'ADD_PRODUCT_ATTRIBUTE',

  UPDATE_PRODUCT = 'UPDATE_PRODUCT',
  UPDATE_ALL_PRODUCT = 'UPDATE_ALL_PRODUCT',
  DELETE_PRODUCT = 'DELETE_PRODUCT',
  DELETE_ALL_PRODUCT = 'DELETE_ALL_PRODUCT',
  ADD_PRODUCT = 'ADD_PRODUCT',
  ADD_ALL_PRODUCT = 'ADD_ALL_PRODUCT',
  GET_PRODUCT = 'GET_PRODUCT',
  GET_ALL_PRODUCT = 'GET_ALL_PRODUCT',
  SORT_PRODUCT = 'SORT_PRODUCT',
  GET_ALL_PRODUCT_STATISTICS = 'GET_ALL_PRODUCT_STATISTICS',
  GET_PRODUCT_STATISTICS = 'GET_PRODUCT_STATISTICS',
  UPDATE_QUICK_PRODUCT = 'UPDATE_QUICK_PRODUCT',

  LINK_PRODUCT_TO_MAKER_BRAND = 'LINK_PRODUCT_TO_MAKER_BRAND',
  LINK_ALL_PRODUCT_TO_MAKER_BRAND = 'LINK_ALL_PRODUCT_TO_MAKER_BRAND',

  DELETE_PRODUCT_PICTURE = 'DELETE_PRODUCT_PICTURE',
  ADD_PRODUCT_PICTURE = 'ADD_PRODUCT_PICTURE',
  GET_PRODUCT_PICTURE = 'GET_PRODUCT_PICTURE',

  // دریافت تعداد مشتریانی که در انتظار موجودی یک محصول هستند
  COUNT_WAITING_CUSTOMER_FOR_PRODUCT_QUANTITY = 'COUNT_WAITING_CUSTOMER_FOR_PRODUCT_QUANTITY',

  // ارسال پیام به مشتریانی که در انتظار موجودی یک محصول هستند
  NOTIFY_WAITING_CUSTOMER_FOR_PRODUCT_QUANTITY = 'NOTIFY_WAITING_CUSTOMER_FOR_PRODUCT_QUANTITY',

  UPDATE_PRODUCT_QUANTITY_UNIT = 'UPDATE_PRODUCT_UNIT_QUANTITY',
  DELETE_PRODUCT_QUANTITY_UNIT = 'DELETE_PRODUCT_QUANTITY_UNIT',
  ADD_PRODUCT_QUANTITY_UNIT = 'ADD_PRODUCT_QUANTITY_UNIT',
  GET_PRODUCT_QUANTITY_UNIT = 'GET_PRODUCT_QUANTITY_UNIT',
  SHOW_PRODUCT_QUANTITY_UNIT_MENU = 'SHOW_PRODUCT_QUANTITY_UNIT_MENU',

  GET_POLL = 'GET_POLL',
  DELETE_POLL = 'DELETE_POLL',
  UPDATE_POLL = 'UPDATE_POLL',
  ADD_POLL = 'ADD_POLL',
  GET_POLL_STATISTICS = 'GET_POLL_STATISTICS',

  ADD_NEWS = 'ADD_NEWS',
  GET_NEWS = 'GET_NEWS',
  DELETE_NEWS = 'DELETE_NEWS',
  UPDATE_NEWS = 'UPDATE_NEWS',
  SORT_NEWS = 'SORT_NEWS',

  NEWS_COMMENT_STATUS = 'NEWS_COMMENT_STATUS',
  GET_NEWS_COMMENT = 'GET_NEWS_COMMENT',

  GET_MANUFACTURER = 'GET_MANUFACTURER',
  SHOW_MANUFACTURER_MENU = 'SHOW_MANUFACTURER_MENU',
  ADD_MANUFACTURER = 'ADD_MANUFACTURER',
  UPDATE_MANUFACTURER = 'UPDATE_MANUFACTURER',
  DELETE_MANUFACTURER = 'DELETE_MANUFACTURER',
  SORT_MANUFACTURER = 'SORT_MANUFACTURER',

  GET_KILOMETER_RANGE = 'GET_KILOMETER_RANGE',
  ADD_KILOMETER_RANGE = 'ADD_KILOMETER_RANGE',
  UPDATE_KILOMETER_RANGE = 'UPDATE_KILOMETER_RANGE',
  DELETE_KILOMETER_RANGE = 'DELETE_KILOMETER_RANGE',

  GET_GALLERY = 'GET_GALLERY',
  ADD_GALLERY = 'ADD_GALLERY',
  UPDATE_GALLERY = 'UPDATE_GALLERY',
  DELETE_GALLERY = 'DELETE_GALLERY',
  SORT_GALLERY = 'SORT_GALLERY',

  GET_EMERGENCY_PHONES = 'GET_EMERGENCY_PHONES',
  ADD_EMERGENCY_PHONES = 'ADD_EMERGENCY_PHONES',
  UPDATE_EMERGENCY_PHONES = 'UPDATE_EMERGENCY_PHONES',
  DELETE_EMERGENCY_PHONES = 'DELETE_EMERGENCY_PHONES',
  SORT_EMERGENCY_PHONES = 'SORT_EMERGENCY_PHONES',

  GET_DISCOUNT = 'GET_DISCOUNT',
  UPDATE_DISCOUNT = 'UPDATE_DISCOUNT',
  ADD_DISCOUNT = 'ADD_DISCOUNT',
  DELETE_DISCOUNT = 'DELETE_DISCOUNT',

  EXPORT_EXCEL_FROM_DISCOUNT = 'EXPORT_EXCEL_FROM_DISCOUNT',
  GET_DISCOUNT_STATISTICS = 'GET_DISCOUNT_STATISTICS',

  ADD_COOPERATION = 'ADD_COOPERATION',
  GET_COOPERATION = 'GET_COOPERATION',
  UPDATE_COOPERATION = 'UPDATE_COOPERATION',
  GET_COOPERATION_STATISTICS = 'GET_COOPERATION_STATISTICS',

  GET_CONTACT = 'GET_CONTACT',
  UPDATE_CONTACT = 'UPDATE_CONTACT',
  REPLY_CONTACT = 'REPLY_CONTACT',
  GET_CONTACT_STATISTICS = 'GET_CONTACT_STATISTICS',
  GET_CONTACT_RELATED_MESSAGE = 'GET_CONTACT_RELATED_MESSAGE',

  ADD_CATEGORY = 'ADD_CATEGORY',
  GET_CATEGORY = 'GET_CATEGORY',
  SHOW_CATEGORY_MENU = 'SHOW_CATEGORY_MENU',
  UPDATE_CATEGORY = 'UPDATE_CATEGORY',
  DELETE_CATEGORY = 'DELETE_CATEGORY',
  SORT_CATEGORY = 'SORT_CATEGORY',

  ADD_CAR = 'ADD_CAR',
  GET_CAR = 'GET_CAR',
  UPDATE_CAR = 'UPDATE_CAR',
  DELETE_CAR = 'DELETE_CAR',

  ADD_MAKER_BRAND = 'ADD_MAKER_BRAND',
  GET_MAKER_BRAND = 'GET_MAKER_BRAND',
  SHOW_MAKER_BRAND_MENU = 'SHOW_MAKER_BRAND_MENU',
  UPDATE_MAKER_BRAND = 'UPDATE_MAKER_BRAND',
  DELETE_MAKER_BRAND = 'DELETE_MAKER_BRAND',
  SORT_MAKER_BRAND = 'SORT_MAKER_BRAND',

  ADD_MAKER = 'ADD_MAKER',
  GET_MAKER = 'GET_MAKER',
  SHOW_MAKER_MENU = 'SHOW_MAKER_MENU',
  UPDATE_MAKER = 'UPDATE_MAKER',
  DELETE_MAKER = 'DELETE_MAKER',
  SORT_MAKER = 'SORT_MAKER',

  ADD_ATTRIBUTE = 'ADD_ATTRIBUTE',
  GET_ATTRIBUTE = 'GET_ATTRIBUTE',
  SHOW_ATTRIBUTE_MENU = 'SHOW_ATTRIBUTE_MENU',
  UPDATE_ATTRIBUTE = 'UPDATE_ATTRIBUTE',
  DELETE_ATTRIBUTE = 'DELETE_ATTRIBUTE',
  SORT_ATTRIBUTE = 'SORT_ATTRIBUTE',

  ADD_ADDRESS = 'ADD_ADDRESS',
  GET_ADDRESS = 'GET_ADDRESS',
  UPDATE_ADDRESS = 'UPDATE_ADDRESS',
  DELETE_ADDRESS = 'DELETE_ADDRESS',

  LINK_MAKER_BRAND_TO_PRODUCT = 'LINK_MAKER_BRAND_TO_PRODUCT',

  ADD_PRODUCT_ORDER = 'ADD_PRODUCT_ORDER',
  DELETE_PRODUCT_ORDER = 'DELETE_PRODUCT_ORDER',
  UPDATE_PRODUCT_ORDER = 'UPDATE_PRODUCT_ORDER',

  REQUEST_SHIPPING = 'REQUEST_SHIPPING',
  GET_DETAIL_SHIPPING = 'GET_DETAIL_SHIPPING',
  CANCEL_SHIPPING = 'CANCEL_SHIPPING',

  GET_LOG = 'GET_LOG',

  GET_CUSTOMER = 'GET_CUSTOMER',
  SORT_CUSTOMER = 'SORT_CUSTOMER',
  UPDATE_CUSTOMER = 'UPDATE_CUSTOMER',
  ADD_CUSTOMER = 'ADD_CUSTOMER',
  DELETE_CUSTOMER = 'DELETE_CUSTOMER',

  GET_SERVICE_WEEK_CLOSED = 'GET_SERVICE_WEEK_CLOSED',
  UPDATE_SERVICE_WEEK_CLOSED = 'UPDATE_SERVICE_WEEK_CLOSED',

  GET_SERVICE_DAYS_CLOSED = 'GET_SERVICE_DAYS_CLOSED',
  ADD_SERVICE_DAYS_CLOSED = 'ADD_SERVICE_DAYS_CLOSED',
  DELETE_SERVICE_DAYS_CLOSED = 'DELETE_SERVICE_DAYS_CLOSED',

  GET_WITHDRAW = 'GET_WITHDRAW',
  UPDATE_WITHDRAW = 'UPDATE_WITHDRAW',

  EXPORT_EXCEL_FROM_USER = 'EXPORT_EXCEL_FROM_USER',

  ADD_BONUS_CREDITS = 'ADD_BONUS_CREDITS',
  EXPORT_EXCEL_FROM_BONUS_CREDITS = 'EXPORT_EXCEL_FROM_BONUS_CREDITS',
  GET_BONUS_CREDITS = 'GET_BONUS_CREDITS',
  DELETE_BONUS_CREDITS = 'DELETE_BONUS_CREDITS',

  GET_PROMOTION = 'GET_PROMOTION',
  UPDATE_PROMOTION = 'UPDATE_PROMOTION',
  ADD_PROMOTION = 'ADD_PROMOTION',
  DELETE_PROMOTION = 'DELETE_PROMOTION',

  GET_PAYMENT = 'GET_PAYMENT',

  GET_DRIVING_OFFENSE = 'GET_DRIVING_OFFENSE',

  GET_NEGATIVE_SCORE = 'GET_NEGATIVE_SCORE',

  GET_ORDER_STATISTICS = 'GET_ORDER_STATISTICS',

  IMPORT_EXCEL_TO_USER = 'IMPORT_EXCEL_TO_USER',

  GET_FREEWAY_TOLL = 'GET_FREEWAY_TOLL',

  GET_ANNOUNCEMENT = 'GET_ANNOUNCEMENT',
  UPDATE_ANNOUNCEMENT = 'UPDATE_ANNOUNCEMENT',
  ADD_ANNOUNCEMENT = 'ADD_ANNOUNCEMENT',
  DELETE_ANNOUNCEMENT = 'DELETE_ANNOUNCEMENT',
}

@Entity('permissions')
export class PermissionEntity extends BaseEntity {
  @PrimaryGeneratedColumn({ type: 'int', name: 'id' })
  id: number;

  @Column('varchar', { name: 'name', length: 45 })
  name: string;

  @Column('varchar', { name: 'category', length: 128 })
  category: string;

  @Column('varchar', { name: 'description', nullable: true, length: 256 })
  description: string | null;

  @Column('varchar', { name: 'type', length: 45 })
  type: string;

  @OneToMany(
    () => RoleMapPermissionEntity,
    (roleMapPermission) => roleMapPermission.permission,
  )
  roleMapPermissions: RoleMapPermissionEntity[];
}
