"""metrics

Revision ID: c0e70bfad692
Revises: 0fc4f5414b35
Create Date: 2025-08-26 14:10:38.417474

"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision: str = 'c0e70bfad692'
down_revision: Union[str, None] = '0fc4f5414b35'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    op.create_table('personas',
    sa.Column('id', sa.BigInteger(), nullable=False),
    sa.Column('store_id', sa.BigInteger(), nullable=True),
    sa.Column('branch_id', sa.BigInteger(), nullable=True),
    sa.Column('name', sa.String(), nullable=False),
    sa.Column('status', sa.String(), nullable=False),
    sa.Column('created_at', sa.DateTime(), nullable=False),
    sa.Column('updated_at', sa.DateTime(), nullable=False),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_table('persona_audience',
    sa.Column('persona_id', sa.BigInteger(), nullable=False),
    sa.Column('locales', sa.JSON(), nullable=True),
    sa.Column('languages', sa.JSON(), nullable=True),
    sa.ForeignKeyConstraint(['persona_id'], ['personas.id'], ),
    sa.PrimaryKeyConstraint('persona_id')
    )
    op.create_table('persona_context',
    sa.Column('persona_id', sa.BigInteger(), nullable=False),
    sa.Column('content_categories', sa.JSON(), nullable=True),
    sa.Column('content_themes', sa.JSON(), nullable=True),
    sa.Column('hashtag_strategy', sa.JSON(), nullable=True),
    sa.Column('posting_cadence', sa.JSON(), nullable=True),
    sa.Column('seasonal_events', sa.JSON(), nullable=True),
    sa.Column('narrative_brand', sa.Text(), nullable=True),
    sa.Column('narrative_audience', sa.Text(), nullable=True),
    sa.Column('narrative_voice', sa.Text(), nullable=True),
    sa.Column('embeddings', sa.JSON(), nullable=True),
    sa.Column('updated_at', sa.DateTime(), nullable=False),
    sa.ForeignKeyConstraint(['persona_id'], ['personas.id'], ),
    sa.PrimaryKeyConstraint('persona_id')
    )
    op.create_table('persona_performance',
    sa.Column('persona_id', sa.BigInteger(), nullable=False),
    sa.Column('engagement_data', sa.JSON(), nullable=True),
    sa.Column('sentiment_metrics', sa.JSON(), nullable=True),
    sa.Column('growth_metrics', sa.JSON(), nullable=True),
    sa.Column('best_performing_posts', sa.JSON(), nullable=True),
    sa.Column('interests', sa.JSON(), nullable=True),
    sa.Column('segments', sa.JSON(), nullable=True),
    sa.Column('best_posting_windows', sa.JSON(), nullable=True),
    sa.Column('best_formats', sa.JSON(), nullable=True),
    sa.Column('best_hashtags', sa.JSON(), nullable=True),
    sa.Column('best_ctas', sa.JSON(), nullable=True),
    sa.Column('baselines', sa.JSON(), nullable=True),
    sa.ForeignKeyConstraint(['persona_id'], ['personas.id'], ),
    sa.PrimaryKeyConstraint('persona_id')
    )
    op.create_table('persona_profile',
    sa.Column('persona_id', sa.BigInteger(), nullable=False),
    sa.Column('brand_summary', sa.Text(), nullable=True),
    sa.Column('voice_rules', sa.JSON(), nullable=True),
    sa.Column('goals', sa.JSON(), nullable=True),
    sa.Column('competitors', sa.JSON(), nullable=True),
    sa.Column('brand_assets', sa.JSON(), nullable=True),
    sa.Column('constraints', sa.JSON(), nullable=True),
    sa.ForeignKeyConstraint(['persona_id'], ['personas.id'], ),
    sa.PrimaryKeyConstraint('persona_id')
    )
    op.create_table('account_metrics_daily',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('connected_account_id', sa.BigInteger(), nullable=True),
    sa.Column('metric_date', sa.Date(), nullable=True),
    sa.Column('followers', sa.Integer(), nullable=True),
    sa.Column('new_followers', sa.Integer(), nullable=True),
    sa.Column('impressions', sa.Integer(), nullable=True),
    sa.Column('profile_visits', sa.Integer(), nullable=True),
    sa.Column('messages_received', sa.Integer(), nullable=True),
    sa.Column('median_response_minutes', sa.Float(), nullable=True),
    sa.ForeignKeyConstraint(['connected_account_id'], ['connected_accounts.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_account_metrics_daily_id'), 'account_metrics_daily', ['id'], unique=False)
    op.create_table('post_metrics_daily',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('post_type_id', sa.BigInteger(), nullable=True),
    sa.Column('metric_date', sa.Date(), nullable=True),
    sa.Column('impressions', sa.Integer(), nullable=True),
    sa.Column('reach', sa.Integer(), nullable=True),
    sa.Column('likes', sa.Integer(), nullable=True),
    sa.Column('comments', sa.Integer(), nullable=True),
    sa.Column('shares', sa.Integer(), nullable=True),
    sa.Column('saves', sa.Integer(), nullable=True),
    sa.Column('link_clicks', sa.Integer(), nullable=True),
    sa.Column('video_views', sa.Integer(), nullable=True),
    sa.Column('video_completions', sa.Integer(), nullable=True),
    sa.Column('unfollows', sa.Integer(), nullable=True),
    sa.Column('hides', sa.Integer(), nullable=True),
    sa.Column('reports', sa.Integer(), nullable=True),
    sa.Column('external_post_id', sa.Text(), nullable=True),
    sa.Column('permalink', sa.Text(), nullable=True),
    sa.ForeignKeyConstraint(['post_type_id'], ['calendar_post_types.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_post_metrics_daily_id'), 'post_metrics_daily', ['id'], unique=False)
    # ### end Alembic commands ###


def downgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    op.drop_index(op.f('ix_post_metrics_daily_id'), table_name='post_metrics_daily')
    op.drop_table('post_metrics_daily')
    op.drop_index(op.f('ix_account_metrics_daily_id'), table_name='account_metrics_daily')
    op.drop_table('account_metrics_daily')
    op.drop_table('persona_profile')
    op.drop_table('persona_performance')
    op.drop_table('persona_context')
    op.drop_table('persona_audience')
    op.drop_table('personas')
    # ### end Alembic commands ###
