"""use single contact person and list of phones

Revision ID: 2a30022441b7
Revises: 4e6a08fb4b17
Create Date: 2026-07-02 16:56:15.396689

"""
from typing import Sequence, Union

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

# revision identifiers, used by Alembic.
"""use single contact person and list of phones

Revision ID: 2a30022441b7
Revises: 4e6a08fb4b17
Create Date: 2026-07-02 16:56:15.396689

"""
from typing import Sequence, Union

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

# revision identifiers, used by Alembic.
revision: str = '2a30022441b7'
down_revision: Union[str, None] = '4e6a08fb4b17'
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.add_column('vendor_master', sa.Column('contact_person', sa.String(length=150), nullable=True))
    op.add_column('vendor_master', sa.Column('phones', postgresql.JSONB(astext_type=sa.Text()), nullable=False, server_default='[]'))
    
    # Migrate contacts data to contact_person and phones JSONB list
    op.execute(
        """
        UPDATE vendor_master
        SET contact_person = contacts->0->>'name',
            phones = COALESCE(
                (
                    SELECT json_agg(c->>'phone')
                    FROM jsonb_array_elements(contacts) AS c
                    WHERE c->>'phone' <> ''
                ),
                '[]'::json
            )::jsonb
        WHERE jsonb_array_length(contacts) > 0
        """
    )
    
    op.drop_column('vendor_master', 'contacts')
    # ### end Alembic commands ###


def downgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    op.add_column('vendor_master', sa.Column('contacts', postgresql.JSONB(astext_type=sa.Text()), server_default=sa.text("'[]'::jsonb"), autoincrement=False, nullable=False))
    
    # Restore contacts from contact_person and phones
    op.execute(
        """
        UPDATE vendor_master
        SET contacts = json_build_array(
            json_build_object(
                'name', COALESCE(contact_person, ''),
                'phone', COALESCE(phones->>0, '')
            )
        )
        """
    )
    
    op.drop_column('vendor_master', 'phones')
    op.drop_column('vendor_master', 'contact_person')
    # ### end Alembic commands ###
