-- Migration: Add lookup tables, account payment methods, tax exemptions
-- Replaces unit_status and item_condition pgEnums with lookup tables

-- 1. Drop defaults that reference old enums
ALTER TABLE "inventory_unit" ALTER COLUMN "status" DROP DEFAULT;
ALTER TABLE "inventory_unit" ALTER COLUMN "condition" DROP DEFAULT;

-- 2. Migrate inventory_unit columns from enum to varchar
ALTER TABLE "inventory_unit" ALTER COLUMN "status" TYPE varchar(100) USING "status"::text;
ALTER TABLE "inventory_unit" ALTER COLUMN "condition" TYPE varchar(100) USING "condition"::text;

-- 3. Re-add defaults as varchar values
ALTER TABLE "inventory_unit" ALTER COLUMN "status" SET DEFAULT 'available';
ALTER TABLE "inventory_unit" ALTER COLUMN "condition" SET DEFAULT 'new';

-- 4. Drop old enums (must happen before creating tables with same names)
DROP TYPE IF EXISTS "unit_status";
DROP TYPE IF EXISTS "item_condition";

-- 3. Create new enum for tax exemptions
CREATE TYPE "tax_exempt_status" AS ENUM ('none', 'pending', 'approved');

-- 4. Create lookup tables (item_condition name is now free)
CREATE TABLE IF NOT EXISTS "inventory_unit_status" (
  "id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  "company_id" uuid NOT NULL REFERENCES "company"("id"),
  "name" varchar(100) NOT NULL,
  "slug" varchar(100) NOT NULL,
  "description" text,
  "is_system" boolean NOT NULL DEFAULT false,
  "sort_order" integer NOT NULL DEFAULT 0,
  "is_active" boolean NOT NULL DEFAULT true,
  "created_at" timestamp with time zone NOT NULL DEFAULT now()
);

CREATE TABLE IF NOT EXISTS "item_condition" (
  "id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  "company_id" uuid NOT NULL REFERENCES "company"("id"),
  "name" varchar(100) NOT NULL,
  "slug" varchar(100) NOT NULL,
  "description" text,
  "is_system" boolean NOT NULL DEFAULT false,
  "sort_order" integer NOT NULL DEFAULT 0,
  "is_active" boolean NOT NULL DEFAULT true,
  "created_at" timestamp with time zone NOT NULL DEFAULT now()
);

-- 5. Create account_payment_method table
CREATE TABLE IF NOT EXISTS "account_payment_method" (
  "id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  "account_id" uuid NOT NULL REFERENCES "account"("id"),
  "company_id" uuid NOT NULL REFERENCES "company"("id"),
  "processor" "payment_processor" NOT NULL,
  "processor_payment_method_id" varchar(255) NOT NULL,
  "card_brand" varchar(50),
  "last_four" varchar(4),
  "exp_month" integer,
  "exp_year" integer,
  "is_default" boolean NOT NULL DEFAULT false,
  "requires_update" boolean NOT NULL DEFAULT false,
  "created_at" timestamp with time zone NOT NULL DEFAULT now()
);

-- 6. Create tax_exemption table
CREATE TABLE IF NOT EXISTS "tax_exemption" (
  "id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  "account_id" uuid NOT NULL REFERENCES "account"("id"),
  "company_id" uuid NOT NULL REFERENCES "company"("id"),
  "status" "tax_exempt_status" NOT NULL DEFAULT 'pending',
  "certificate_number" varchar(255) NOT NULL,
  "certificate_type" varchar(100),
  "issuing_state" varchar(2),
  "expires_at" date,
  "approved_by" uuid,
  "approved_at" timestamp with time zone,
  "revoked_by" uuid,
  "revoked_at" timestamp with time zone,
  "revoked_reason" text,
  "notes" text,
  "created_at" timestamp with time zone NOT NULL DEFAULT now(),
  "updated_at" timestamp with time zone NOT NULL DEFAULT now()
);

-- 7. Add unique constraint on lookup slugs per company
CREATE UNIQUE INDEX "inventory_unit_status_company_slug" ON "inventory_unit_status" ("company_id", "slug");
CREATE UNIQUE INDEX "item_condition_company_slug" ON "item_condition" ("company_id", "slug");
