import type * as Schema from './schema';

// ── Auth ──

export type UserSelect = typeof Schema.users.$inferSelect;
export type UserInsert = typeof Schema.users.$inferInsert;
export type User = UserSelect & {
  passkeys: PasskeySelect[];
};

export type PasskeySelect = typeof Schema.passkeys.$inferSelect;
export type PasskeyInsert = typeof Schema.passkeys.$inferInsert;
export type Passkey = PasskeySelect & {
  user: UserSelect;
};

export type PasskeyChallengeSelect = typeof Schema.passkeyChallenges.$inferSelect;
export type PasskeyChallengeInsert = typeof Schema.passkeyChallenges.$inferInsert;

export type TokenBlacklistSelect = typeof Schema.tokenBlacklist.$inferSelect;
export type TokenBlacklistInsert = typeof Schema.tokenBlacklist.$inferInsert;

// ── User Data ──

export type UserSettingsSelect = typeof Schema.userSettings.$inferSelect;
export type UserSettingsInsert = typeof Schema.userSettings.$inferInsert;

export type UserStateSelect = typeof Schema.userState.$inferSelect;
export type UserStateInsert = typeof Schema.userState.$inferInsert;

export type UserIntegrationSelect = typeof Schema.userIntegrations.$inferSelect;
export type UserIntegrationInsert = typeof Schema.userIntegrations.$inferInsert;

export type DockConfigSelect = typeof Schema.dockConfigs.$inferSelect;
export type DockConfigInsert = typeof Schema.dockConfigs.$inferInsert;

// ── Saved Sessions ──

// ── Dashboards ──

export type DashboardSelect = typeof Schema.dashboards.$inferSelect;
export type DashboardInsert = typeof Schema.dashboards.$inferInsert;

export type ScreenSelect = typeof Schema.screens.$inferSelect;
export type ScreenInsert = typeof Schema.screens.$inferInsert;

// ── Operations ──

export type TaskLogSelect = typeof Schema.taskLogs.$inferSelect;
export type TaskLogInsert = typeof Schema.taskLogs.$inferInsert;

export type QueueJobSelect = typeof Schema.queueJobs.$inferSelect;
export type QueueJobInsert = typeof Schema.queueJobs.$inferInsert;

export type TerminalContainerSelect = typeof Schema.terminalContainers.$inferSelect;
export type TerminalContainerInsert = typeof Schema.terminalContainers.$inferInsert;

// ── Email ──

export type EmailAccountSelect = typeof Schema.emailAccounts.$inferSelect;
export type EmailAccountInsert = typeof Schema.emailAccounts.$inferInsert;

// ── Server ──

export type ServerConfigSelect = typeof Schema.serverConfig.$inferSelect;
export type ServerConfigInsert = typeof Schema.serverConfig.$inferInsert;

export type ServerIntegrationSelect = typeof Schema.serverIntegrations.$inferSelect;
export type ServerIntegrationInsert = typeof Schema.serverIntegrations.$inferInsert;

// ── Pipeline Jobs ──

export type PipelineJobSelect = typeof Schema.pipelineJobs.$inferSelect;
export type PipelineJobInsert = typeof Schema.pipelineJobs.$inferInsert;

// Notifications
export type PushDeviceSelect = typeof Schema.pushDevices.$inferSelect;
export type PushDeviceInsert = typeof Schema.pushDevices.$inferInsert;

// ── API keys ──

export type ApiKeySelect = typeof Schema.apiKeys.$inferSelect;
export type ApiKeyInsert = typeof Schema.apiKeys.$inferInsert;
