export type Action = 'create' | 'read' | 'update' | 'delete';

export type Resource = 
  | 'partnerNetwork'
  | 'websites'
  | 'tasks'
  | 'leads'
  | 'customers'
  | 'campaigns'
  | 'contacts'
  | 'leadStages'
  | 'captureLeads'
  | 'reports'
  | 'projects'
  | 'projectUnits'
  | 'constructionProgress'
  | 'projectFiles'
  | 'properties'
  | 'propertyUsageTypes'
  | 'subCategories'
  | 'categories'
  | 'configuration'
  | 'propertySize'
  | 'propertyAge'
  | 'amenities'
  | 'tags'
  | 'sources'
  | 'company'
  | 'user'
  | 'countries'
  | 'states'
  | 'cities'
  | 'areas'
  | 'notification'
  | 'dashboard'
  | 'support'
  | 'settingUser'
  | 'settingTeams'
  | 'settingRoles'
  | 'settingbankAccounts'
  | 'settingpaymentPlans'
  | 'settingprojectCharges'
  | 'settingtermsConditions'
  | 'settingdocumentTemplates'
  | 'settingcompanyAccount'
  | 'settingcompanyRules'
  | 'settingsaleSettings'
  | 'settingemailAlerts'
  | 'settingsmsAlerts'
  | 'settingwhatsappAlerts'
  | 'settingcustomForms'
  | 'settingtransferLeads'
  | 'settingactivityLog'
  | 'settingleadStages'
  | 'settingleadScore'
  | 'settingleadSource'
  | 'targets';

export type Permission = `${Resource}:${Action}`;

export interface UserSession {
  user: {
    permissions: Permission[];
    id: string;
    name?: string;
    email?: string;
  };
}

export interface PermissionContextType {
  permissions: Permission[];
  loading: boolean;
  can: (permission: Permission) => boolean;
  canDo: (resource: Resource, action: Action) => boolean;
  getActions: (resource: Resource) => Action[];
  canAny: (permissionList: Permission[]) => boolean;
  canView: (resource: Resource) => boolean;
  canCreate: (resource: Resource) => boolean;
  canEdit: (resource: Resource) => boolean;
  canDelete: (resource: Resource) => boolean;
}

export interface MenuItem {
  label: string;
  href: string;
  icon?: string;
  permission?: Permission;
  children?: MenuItem[];
}

export interface ActionConfig {
  label: string;
  color: string;
  icon: string;
  variant?: 'primary' | 'secondary' | 'danger' | 'success';
}