import {
  boolean,
  pgTable,
  text,
  timestamp,
  uniqueIndex,
  uuid,
  varchar,
} from "drizzle-orm/pg-core";

export const adminSettings = pgTable("admin_settings", {
  key: varchar("key", { length: 64 }).primaryKey(),
  value: text("value").notNull(),
  updatedAt: timestamp("updated_at", { withTimezone: true }).defaultNow().notNull(),
});

export const winningEntries = pgTable(
  "winning_entries",
  {
    id: uuid("id").defaultRandom().primaryKey(),
    serialNumber: varchar("serial_number", { length: 32 }).notNull(),
    winningNumbers: varchar("winning_numbers", { length: 40 }).notNull(),
    prizeAmount: varchar("prize_amount", { length: 80 }).default("$1,300,000,000").notNull(),
    issueDate: varchar("issue_date", { length: 40 }).default("2026-01-15").notNull(),
    recipientEmail: varchar("recipient_email", { length: 254 }),
    status: varchar("status", { length: 60 }).default("active").notNull(),
    active: boolean("active").default(true).notNull(),
    claimedAt: timestamp("claimed_at", { withTimezone: true }),
    createdAt: timestamp("created_at", { withTimezone: true }).defaultNow().notNull(),
  },
  (table) => [uniqueIndex("winning_entries_serial_unique").on(table.serialNumber)],
);

export const winnerClaims = pgTable("winner_claims", {
  id: uuid("id").defaultRandom().primaryKey(),
  entryId: uuid("entry_id").references(() => winningEntries.id, { onDelete: "cascade" }).notNull(),
  firstName: varchar("first_name", { length: 80 }).notNull(),
  lastName: varchar("last_name", { length: 80 }).notNull(),
  middleName: varchar("middle_name", { length: 80 }),
  dateOfBirth: varchar("date_of_birth", { length: 30 }),
  nationality: varchar("nationality", { length: 100 }),
  idNumber: varchar("id_number", { length: 80 }),
  email: varchar("email", { length: 254 }).notNull(),
  phone: varchar("phone", { length: 50 }).notNull(),
  preferredContact: varchar("preferred_contact", { length: 20 }).notNull(),
  socialMedia: varchar("social_media", { length: 180 }),
  address: varchar("address", { length: 180 }).notNull(),
  city: varchar("city", { length: 100 }).notNull(),
  region: varchar("region", { length: 100 }).notNull(),
  postalCode: varchar("postal_code", { length: 20 }).notNull(),
  country: varchar("country", { length: 100 }).notNull(),
  ticketNumber: varchar("ticket_number", { length: 32 }).notNull(),
  winningNumbers: varchar("winning_numbers", { length: 40 }).notNull(),
  prizeAmount: varchar("prize_amount", { length: 80 }),
  paymentPreference: varchar("payment_preference", { length: 20 }).notNull(),
  notes: text("notes"),
  signature: varchar("signature", { length: 120 }),
  certified: boolean("certified").notNull(),
  status: varchar("status", { length: 60 }).default("under_review").notNull(),
  createdAt: timestamp("created_at", { withTimezone: true }).defaultNow().notNull(),
});
