; -- 确保上一条语句结束

-- 先删除旧表以确保结构正确 (防止字段不一致报错)
DROP TABLE IF EXISTS public.ec_service_requests CASCADE;

-- 创建服务请求表
CREATE TABLE public.ec_service_requests (
    id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
    elder_id uuid NOT NULL REFERENCES public.ec_elders(id) ON DELETE CASCADE,
    type VARCHAR(50) NOT NULL, -- 请求类型: nurse_call, cleaning, meal, medical, other
    priority VARCHAR(20) DEFAULT 'normal', -- 优先级: low, normal, high, urgent
    description TEXT, -- 详细描述
    status VARCHAR(20) DEFAULT 'pending', -- 状态: pending, processing, completed, cancelled
    handler_id uuid REFERENCES public.ak_users(id), -- 处理人ID
    handled_at TIMESTAMP WITH TIME ZONE, -- 处理时间
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

-- 确保测试老人存在 (如果不存在则插入)
INSERT INTO public.ec_elders (id, name, gender, status)
VALUES ('7bf7378e-a027-473e-97ac-3460ed3f170a', '测试老人', 'male', 'active')
ON CONFLICT (id) DO NOTHING;

-- 插入测试数据
INSERT INTO public.ec_service_requests (elder_id, type, priority, description, status, created_at)
VALUES 
('7bf7378e-a027-473e-97ac-3460ed3f170a', 'nurse_call', 'high', '老人呼叫护理员', 'pending', '2025-11-26T09:18:05.716Z');

-- 创建索引
CREATE INDEX IF NOT EXISTS idx_ec_service_requests_elder_id ON public.ec_service_requests(elder_id);
CREATE INDEX IF NOT EXISTS idx_ec_service_requests_status ON public.ec_service_requests(status);
CREATE INDEX IF NOT EXISTS idx_ec_service_requests_created_at ON public.ec_service_requests(created_at);

-- 启用 RLS
ALTER TABLE public.ec_service_requests ENABLE ROW LEVEL SECURITY;

-- RLS 策略
-- 允许认证用户插入数据 (老人发起请求)
DROP POLICY IF EXISTS service_requests_insert_authenticated ON public.ec_service_requests;
CREATE POLICY service_requests_insert_authenticated ON public.ec_service_requests
    FOR INSERT TO authenticated
    WITH CHECK (true);

-- 允许认证用户查询数据 (老人查看自己的，员工查看所有的 - 这里简化为允许所有认证用户查看)
DROP POLICY IF EXISTS service_requests_select_authenticated ON public.ec_service_requests;
CREATE POLICY service_requests_select_authenticated ON public.ec_service_requests
    FOR SELECT TO authenticated
    USING (true);

-- 允许认证用户更新数据 (员工处理请求，老人取消请求)
DROP POLICY IF EXISTS service_requests_update_authenticated ON public.ec_service_requests;
CREATE POLICY service_requests_update_authenticated ON public.ec_service_requests
    FOR UPDATE TO authenticated
    USING (true);
