-- ============================================================
-- TopTran — PostgreSQL table creation script
-- ============================================================
-- NOTE: The "users" table already exists with the schema below.
-- Do NOT run the commented block if it already exists.
-- ============================================================

-- [EXISTING TABLE — DO NOT RECREATE]
-- CREATE TABLE IF NOT EXISTS users (
--   id          TEXT        PRIMARY KEY,
--   name        TEXT        NOT NULL,
--   email       TEXT        NOT NULL UNIQUE,
--   password    TEXT        NOT NULL,
--   "createdAt" TIMESTAMPTZ DEFAULT NOW(),
--   "updatedAt" TIMESTAMPTZ
-- );

-- ============================================================
-- Enums
-- ============================================================
DO $$ BEGIN
  CREATE TYPE "TokenType" AS ENUM ('REFRESH');
EXCEPTION WHEN duplicate_object THEN NULL;
END $$;

-- ============================================================
-- Tokens
-- ============================================================
CREATE TABLE IF NOT EXISTS tokens (
  id          TEXT        PRIMARY KEY,
  token       TEXT        NOT NULL UNIQUE,
  type        "TokenType" NOT NULL,
  "userId"    TEXT        NOT NULL REFERENCES users(id) ON DELETE CASCADE,
  "expiresAt" TIMESTAMPTZ NOT NULL,
  "createdAt" TIMESTAMPTZ DEFAULT NOW()
);

-- ============================================================
-- Companies
-- ============================================================
CREATE TABLE IF NOT EXISTS companies (
  id           TEXT          PRIMARY KEY,
  name         TEXT          NOT NULL,
  cost_per_km  NUMERIC(10,2) NOT NULL,
  notes        TEXT          DEFAULT '',
  "createdAt"  TIMESTAMPTZ   DEFAULT NOW(),
  "updatedAt"  TIMESTAMPTZ   DEFAULT NOW()
);

-- ============================================================
-- Rides
-- ============================================================
CREATE TABLE IF NOT EXISTS rides (
  id           TEXT          PRIMARY KEY,
  user_id      TEXT          NOT NULL REFERENCES users(id) ON DELETE CASCADE,
  company      TEXT          NOT NULL,
  km           NUMERIC(10,2) NOT NULL,
  cost_per_km  NUMERIC(10,2) NOT NULL,
  total        NUMERIC(10,2) NOT NULL,
  ride_date    TEXT          NOT NULL,
  synced       SMALLINT      DEFAULT 0,
  "createdAt"  TIMESTAMPTZ   DEFAULT NOW(),
  "updatedAt"  TIMESTAMPTZ   DEFAULT NOW()
);

-- ============================================================
-- Indexes
-- ============================================================
CREATE INDEX IF NOT EXISTS idx_rides_user_id   ON rides(user_id);
CREATE INDEX IF NOT EXISTS idx_rides_synced    ON rides(synced);
CREATE INDEX IF NOT EXISTS idx_companies_name  ON companies(name);
CREATE INDEX IF NOT EXISTS idx_tokens_user_id  ON tokens("userId");
