import type { RolePermissions, UserPreferences } from '@/lib/db/schema/users';
import type { Port } from '@/lib/db/schema/ports';

/** Typed Better Auth user object */
export interface AuthUser {
  id: string;
  email: string;
  name: string;
  image: string | null;
  emailVerified: boolean;
  createdAt: Date;
  updatedAt: Date;
}

/** Typed Better Auth session object */
export interface AuthSession {
  id: string;
  userId: string;
  token: string;
  expiresAt: Date;
  ipAddress: string | null;
  userAgent: string | null;
  createdAt: Date;
  updatedAt: Date;
  user: AuthUser | null;
}

/** Extended user profile (from user_profiles table) */
export interface UserProfile {
  id: string;
  userId: string;
  displayName: string;
  avatarUrl: string | null;
  phone: string | null;
  isSuperAdmin: boolean;
  isActive: boolean;
  lastLoginAt: Date | null;
  preferences: UserPreferences;
  createdAt: Date;
  updatedAt: Date;
}

/** Port context as seen by the authenticated user */
export interface PortContext {
  port: Port;
  roleId: string;
  roleName: string;
  permissions: RolePermissions;
}

/** Full authenticated user context (session + profile + port roles) */
export interface AuthenticatedUser extends AuthUser {
  profile: UserProfile | null;
  portContexts: PortContext[];
  currentPortContext: PortContext | null;
}
