-- ============================================================================
-- LeAudit Platform — 交叉评查第一阶段表结构
-- ============================================================================

BEGIN;

CREATE TABLE IF NOT EXISTS leaudit_cross_review_tasks (
    id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    task_name VARCHAR(255) NOT NULL,
    task_type VARCHAR(32) NOT NULL,
    doc_type_id BIGINT,
    doc_type_code VARCHAR(64),
    assigner_id BIGINT NOT NULL,
    status VARCHAR(32) NOT NULL DEFAULT 'in_progress',
    create_time TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    update_time TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    delete_time TIMESTAMPTZ
);

CREATE INDEX IF NOT EXISTS idx_lcr_tasks_assigner_id ON leaudit_cross_review_tasks (assigner_id);
CREATE INDEX IF NOT EXISTS idx_lcr_tasks_status ON leaudit_cross_review_tasks (status);
CREATE INDEX IF NOT EXISTS idx_lcr_tasks_doc_type_id ON leaudit_cross_review_tasks (doc_type_id);

COMMENT ON TABLE leaudit_cross_review_tasks IS '交叉评查任务主表';

CREATE TABLE IF NOT EXISTS leaudit_cross_review_task_members (
    id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    task_id BIGINT NOT NULL,
    user_id BIGINT NOT NULL,
    member_role VARCHAR(32) NOT NULL DEFAULT 'participant',
    create_time TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    update_time TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    delete_time TIMESTAMPTZ
);

CREATE INDEX IF NOT EXISTS idx_lcr_task_members_task_id ON leaudit_cross_review_task_members (task_id);
CREATE INDEX IF NOT EXISTS idx_lcr_task_members_user_id ON leaudit_cross_review_task_members (user_id);
CREATE INDEX IF NOT EXISTS idx_lcr_task_members_role ON leaudit_cross_review_task_members (member_role);
CREATE UNIQUE INDEX IF NOT EXISTS uq_lcr_task_members_task_user_active
    ON leaudit_cross_review_task_members (task_id, user_id)
    WHERE delete_time IS NULL;

COMMENT ON TABLE leaudit_cross_review_task_members IS '交叉评查任务成员表';

CREATE TABLE IF NOT EXISTS leaudit_cross_review_task_documents (
    id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    task_id BIGINT NOT NULL,
    document_id BIGINT NOT NULL,
    audit_status INTEGER NOT NULL DEFAULT 0,
    create_time TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    update_time TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    delete_time TIMESTAMPTZ
);

CREATE INDEX IF NOT EXISTS idx_lcr_task_documents_task_id ON leaudit_cross_review_task_documents (task_id);
CREATE INDEX IF NOT EXISTS idx_lcr_task_documents_document_id ON leaudit_cross_review_task_documents (document_id);
CREATE INDEX IF NOT EXISTS idx_lcr_task_documents_task_status ON leaudit_cross_review_task_documents (task_id, audit_status);
CREATE UNIQUE INDEX IF NOT EXISTS uq_lcr_task_documents_task_document_active
    ON leaudit_cross_review_task_documents (task_id, document_id)
    WHERE delete_time IS NULL;

COMMENT ON TABLE leaudit_cross_review_task_documents IS '交叉评查任务文档挂载表';

CREATE TABLE IF NOT EXISTS leaudit_cross_review_proposals (
    id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    task_id BIGINT NOT NULL,
    document_id BIGINT NOT NULL,
    rule_result_id BIGINT NOT NULL,
    proposer_id BIGINT NOT NULL,
    proposed_score_delta NUMERIC(10, 2) NOT NULL,
    reason TEXT NOT NULL,
    status VARCHAR(32) NOT NULL DEFAULT 'pending',
    create_time TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    update_time TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    delete_time TIMESTAMPTZ
);

CREATE INDEX IF NOT EXISTS idx_lcr_proposals_task_id ON leaudit_cross_review_proposals (task_id);
CREATE INDEX IF NOT EXISTS idx_lcr_proposals_document_id ON leaudit_cross_review_proposals (document_id);
CREATE INDEX IF NOT EXISTS idx_lcr_proposals_rule_result_id ON leaudit_cross_review_proposals (rule_result_id);
CREATE INDEX IF NOT EXISTS idx_lcr_proposals_proposer_id ON leaudit_cross_review_proposals (proposer_id);
CREATE INDEX IF NOT EXISTS idx_lcr_proposals_status ON leaudit_cross_review_proposals (status);

COMMENT ON TABLE leaudit_cross_review_proposals IS '交叉评查提案表';

CREATE TABLE IF NOT EXISTS leaudit_cross_review_votes (
    id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    proposal_id BIGINT NOT NULL,
    voter_id BIGINT NOT NULL,
    vote_type VARCHAR(16) NOT NULL,
    create_time TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    update_time TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    delete_time TIMESTAMPTZ
);

CREATE INDEX IF NOT EXISTS idx_lcr_votes_proposal_id ON leaudit_cross_review_votes (proposal_id);
CREATE INDEX IF NOT EXISTS idx_lcr_votes_voter_id ON leaudit_cross_review_votes (voter_id);
CREATE UNIQUE INDEX IF NOT EXISTS uq_lcr_votes_proposal_voter_active
    ON leaudit_cross_review_votes (proposal_id, voter_id)
    WHERE delete_time IS NULL;

COMMENT ON TABLE leaudit_cross_review_votes IS '交叉评查投票表';

COMMIT;
