-- Create table for Signed Prekeys
CREATE TABLE IF NOT EXISTS public.signed_prekeys (
    user_id UUID NOT NULL REFERENCES public.users(id) ON DELETE CASCADE,
    key_id INTEGER NOT NULL,
    public_key TEXT NOT NULL,
    signature TEXT NOT NULL,
    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    PRIMARY KEY (user_id, key_id)
);

-- Create table for One-Time Prekeys
CREATE TABLE IF NOT EXISTS public.one_time_prekeys (
    user_id UUID NOT NULL REFERENCES public.users(id) ON DELETE CASCADE,
    key_id INTEGER NOT NULL,
    public_key TEXT NOT NULL,
    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    UNIQUE (user_id, key_id)
);
CREATE INDEX IF NOT EXISTS idx_one_time_prekeys_user_created ON public.one_time_prekeys(user_id, created_at ASC);

-- Create table for Secure Messages
CREATE TABLE IF NOT EXISTS public.secure_messages (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    conversation_id UUID NOT NULL,
    sender_id UUID NOT NULL REFERENCES public.users(id),
    receiver_id UUID NOT NULL REFERENCES public.users(id),
    ciphertext TEXT NOT NULL,
    iv TEXT NOT NULL,
    key_version TEXT NOT NULL,
    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_secure_messages_conv_created ON public.secure_messages(conversation_id, created_at DESC);
