from collections.abc import Sequence

import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql

revision: str = '001'
down_revision: str | None = None
branch_labels: str | Sequence[str] | None = None
depends_on: str | Sequence[str] | None = None

def upgrade() -> None:
    op.execute('CREATE SCHEMA IF NOT EXISTS data_center')
    op.create_table('data_processing_tasks', sa.Column('id', sa.Integer(), nullable=False), sa.Column('task_id', sa.String(length=50), nullable=False), sa.Column('category_id', sa.Integer(), nullable=True), sa.Column('mode', sa.String(length=20), nullable=False), sa.Column('status', sa.String(length=20), nullable=False), sa.Column('progress', sa.Integer(), nullable=True), sa.Column('total_count', sa.Integer(), nullable=True), sa.Column('success_count', sa.Integer(), nullable=True), sa.Column('failed_count', sa.Integer(), nullable=True), sa.Column('error_message', sa.Text(), nullable=True), sa.Column('started_at', sa.DateTime(), nullable=True), sa.Column('completed_at', sa.DateTime(), nullable=True), sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=True), sa.Column('updated_at', sa.DateTime(), server_default=sa.text('now()'), nullable=True), sa.PrimaryKeyConstraint('id'), schema='data_center')
    op.create_index('idx_task_created', 'data_processing_tasks', ['created_at'], schema='data_center')
    op.create_index('idx_task_status', 'data_processing_tasks', ['status'], schema='data_center')
    op.create_index(op.f('ix_data_processing_tasks_id'), 'data_processing_tasks', ['id'], schema='data_center')
    op.create_index(op.f('ix_data_processing_tasks_task_id'), 'data_processing_tasks', ['task_id'], unique=True, schema='data_center')
    op.create_index(op.f('ix_data_processing_tasks_category_id'), 'data_processing_tasks', ['category_id'], schema='data_center')
    op.create_table('tax_documents', sa.Column('id', sa.Integer(), nullable=False), sa.Column('source_url', sa.String(length=500), nullable=False), sa.Column('category_id', sa.Integer(), nullable=False), sa.Column('doc_number', sa.String(length=100), nullable=True), sa.Column('title', sa.String(length=500), nullable=False), sa.Column('issuing_authority', sa.String(length=200), nullable=True), sa.Column('issue_date', sa.Date(), nullable=True), sa.Column('effective_date', sa.Date(), nullable=True), sa.Column('content_html', sa.Text(), nullable=True), sa.Column('content_markdown', sa.Text(), nullable=True), sa.Column('file_path', sa.String(length=500), nullable=True), sa.Column('attachments', postgresql.JSON(astext_type=sa.Text()), nullable=True), sa.Column('processing_status', sa.String(length=20), nullable=True), sa.Column('content_hash', sa.String(length=64), nullable=True), sa.Column('last_check_time', sa.DateTime(), nullable=True), sa.Column('is_imported', sa.Boolean(), nullable=True), sa.Column('knowledge_doc_id', sa.Integer(), nullable=True), sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=True), sa.Column('updated_at', sa.DateTime(), server_default=sa.text('now()'), nullable=True), sa.PrimaryKeyConstraint('id'), schema='data_center')
    op.create_index('idx_doc_category', 'tax_documents', ['category_id'], schema='data_center')
    op.create_index('idx_doc_hash', 'tax_documents', ['content_hash'], schema='data_center')
    op.create_index('idx_doc_imported', 'tax_documents', ['is_imported'], schema='data_center')
    op.create_index('idx_doc_issue_date', 'tax_documents', ['issue_date'], schema='data_center')
    op.create_index('idx_doc_status', 'tax_documents', ['processing_status'], schema='data_center')
    op.create_index(op.f('ix_tax_documents_id'), 'tax_documents', ['id'], schema='data_center')
    op.create_index(op.f('ix_tax_documents_source_url'), 'tax_documents', ['source_url'], unique=True, schema='data_center')
    op.create_index(op.f('ix_tax_documents_doc_number'), 'tax_documents', ['doc_number'], schema='data_center')
    op.create_table('processing_logs', sa.Column('id', sa.Integer(), nullable=False), sa.Column('task_id', sa.String(length=50), nullable=True), sa.Column('document_url', sa.String(length=500), nullable=True), sa.Column('log_level', sa.String(length=20), nullable=False), sa.Column('message', sa.Text(), nullable=False), sa.Column('exception', sa.Text(), nullable=True), sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=True), sa.PrimaryKeyConstraint('id'), schema='data_center')
    op.create_index('idx_log_created', 'processing_logs', ['created_at'], schema='data_center')
    op.create_index('idx_log_level', 'processing_logs', ['log_level'], schema='data_center')
    op.create_index('idx_log_task', 'processing_logs', ['task_id'], schema='data_center')
    op.create_index(op.f('ix_processing_logs_id'), 'processing_logs', ['id'], schema='data_center')

def downgrade() -> None:
    op.drop_table('processing_logs', schema='data_center')
    op.drop_table('tax_documents', schema='data_center')
    op.drop_table('data_processing_tasks', schema='data_center')
