import { pgTable, serial, text, integer, timestamp, jsonb, unique } from 'drizzle-orm/pg-core';
import { users } from './auth';

export const dashboards = pgTable(
  'dashboards',
  {
    id: text('id').primaryKey(),
    userId: integer('user_id')
      .notNull()
      .references(() => users.id, { onDelete: 'cascade' }),
    name: text('name').notNull(),
    config: jsonb('config').notNull().default({}),
    layout: jsonb('layout').notNull().default([]),
    terminals: jsonb('terminals').notNull().default([]),
    hostTerminals: jsonb('host_terminals').notNull().default([]),
    sortOrder: integer('sort_order').notNull().default(0),
    createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
    updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),
  },
  (table) => [unique('uq_dashboards_user_id').on(table.userId, table.id)],
);

export const screens = pgTable(
  'screens',
  {
    id: serial('id').primaryKey(),
    userId: integer('user_id')
      .notNull()
      .references(() => users.id, { onDelete: 'cascade' }),
    name: text('name').notNull(),
    layout: jsonb('layout').notNull().default([]),
    terminals: jsonb('terminals').notNull().default({}),
    hostTerminals: jsonb('host_terminals').notNull().default({}),
    updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),
  },
  (table) => [unique('uq_screens_user_name').on(table.userId, table.name)],
);

export const projects = pgTable(
  'projects',
  {
    id: serial('id').primaryKey(),
    userId: integer('user_id')
      .notNull()
      .references(() => users.id, { onDelete: 'cascade' }),
    slug: text('slug').notNull(),
    meta: jsonb('meta').notNull().default({}),
    layout: jsonb('layout').notNull().default([]),
    terminals: jsonb('terminals').notNull().default([]),
    hostTerminals: jsonb('host_terminals').notNull().default({}),
    createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
    updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),
  },
  (table) => [unique('uq_projects_user_slug').on(table.userId, table.slug)],
);

export const dashboardDefaults = pgTable('dashboard_defaults', {
  id: serial('id').primaryKey(),
  userId: integer('user_id')
    .notNull()
    .references(() => users.id, { onDelete: 'cascade' })
    .unique(),
  terminals: jsonb('terminals').notNull().default({}),
  hostTerminals: jsonb('host_terminals').notNull().default({}),
  updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),
});
