import { UserRow } from "./database";

export type SystemRoleId =
  | "SUPER_ADMIN"
  | "EMPLOYEE"
  | "AGENCY_ADMIN"
  | "AGENT"
  | "PROPERTY_OWNER"
  | "CUSTOMER";

export type PermissionString =
  | "property:create"
  | "property:read_published"
  | "property:read_own"
  | "property:update_own"
  | "property:delete_own"
  | "property:approve_reject"
  | "property:suspend"
  | "property:feature"
  | "agency:create"
  | "agency:update_profile"
  | "agency:manage_agents"
  | "agency:verify"
  | "agent:verify_kyc"
  | "lead:read_own"
  | "lead:update_status"
  | "lead:assign"
  | "subscription:read"
  | "subscription:override"
  | "payment:read"
  | "employee:manage"
  | "audit:read"
  | "settings:manage";

export type PermissionKey = PermissionString;

export const ALL_PERMISSIONS: PermissionString[] = [
  "property:create",
  "property:read_published",
  "property:read_own",
  "property:update_own",
  "property:delete_own",
  "property:approve_reject",
  "property:suspend",
  "property:feature",
  "agency:create",
  "agency:update_profile",
  "agency:manage_agents",
  "agency:verify",
  "agent:verify_kyc",
  "lead:read_own",
  "lead:update_status",
  "lead:assign",
  "subscription:read",
  "subscription:override",
  "payment:read",
  "employee:manage",
  "audit:read",
  "settings:manage",
];

export interface AuthenticatedUser extends UserRow {
  roles: SystemRoleId[];
  permissions: PermissionString[];
  agencyMembership?: {
    agencyId: string;
    agencySlug?: string;
    role: "ADMIN" | "AGENT" | "COORDINATOR";
  } | null;
}
