-- 1. Bảng lưu thông tin Hóa đơn (Bills)
CREATE TABLE bills (
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), -- Sử dụng UUID v4
    code VARCHAR(50) UNIQUE NOT NULL,               -- Mã hóa đơn (VD: BILL-202504-001)
    
    -- Liên kết dữ liệu 
    room_id UUID NOT NULL,
    resident_id UUID NOT NULL,
    
    -- Thông tin thanh toán
    billing_period DATE NOT NULL,                   -- Kỳ thanh toán
    due_date DATE NOT NULL,                         -- Hạn thanh toán
    payment_method VARCHAR(50),                     -- Phương thức TT (cash, bank_transfer, v.v.)
    notes TEXT,                                     -- Ghi chú
    
    total_amount DECIMAL(15, 2) DEFAULT 0,          -- Tổng tiền
    status VARCHAR(20) NOT NULL DEFAULT 'pending',  -- Trạng thái: draft, paid, pending, overdue
    
    -- Thông tin hệ thống
    created_by UUID,             
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
);

-- Tạo Index cho các cột thường xuyên được truy vấn/lọc
CREATE INDEX idx_bills_room_id ON bills(room_id);
CREATE INDEX idx_bills_resident_id ON bills(resident_id);
CREATE INDEX idx_bills_billing_period ON bills(billing_period);
CREATE INDEX idx_bills_status_due_date ON bills(status, due_date);


-- 2. Bảng lưu chi tiết các khoản phí (Bill Items)
CREATE TABLE bill_items (
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), -- Sử dụng UUID v4
    bill_id UUID NOT NULL,                          -- Khóa ngoại trỏ về bảng bills
    
    -- Chi tiết khoản thu
    fee_name VARCHAR(255) NOT NULL,                 -- Tên khoản phí (Tiền thuê, Điện, Nước...)
    quantity INT NOT NULL DEFAULT 1,                -- Số lượng
    unit_price DECIMAL(15, 2) NOT NULL,             -- Đơn giá
    
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    -- Thiết lập khóa ngoại (Xóa bill mẹ thì các item con cũng tự động xóa)
    CONSTRAINT fk_bill_items_bill 
        FOREIGN KEY (bill_id) 
        REFERENCES bills(id) 
        ON DELETE CASCADE
);
