"""CSD por empresa en ``fin.issuer_settings``.

Cierra el hueco de que el certificado de sello digital tuviera que dejarse a mano en el
almacenamiento y de que su contraseña fuera una variable de entorno global: con varias
empresas emisoras eso no funciona, porque cada una tiene su propio certificado.

La contraseña se guarda cifrada (``core.crypto``); la clave maestra vive en el entorno.

Escrita a mano, no con ``--autogenerate``: ver la nota de la migración h3i4j5k6l7m8.

Revision ID: i4j5k6l7m8n9
Revises: h3i4j5k6l7m8
Create Date: 2026-08-10 00:00:00.000000

"""
from typing import Sequence, Union

import sqlalchemy as sa
from alembic import op

revision: str = "i4j5k6l7m8n9"
down_revision: Union[str, None] = "h3i4j5k6l7m8"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None

_COLUMNAS = (
    ("csd_cer_file_key", sa.String(length=512)),
    ("csd_key_file_key", sa.String(length=512)),
    ("csd_password_enc", sa.Text()),
    ("csd_cert_number", sa.String(length=20)),
    ("csd_uploaded_at", sa.DateTime()),
)


def upgrade() -> None:
    for nombre, tipo in _COLUMNAS:
        op.add_column("issuer_settings", sa.Column(nombre, tipo, nullable=True), schema="fin")


def downgrade() -> None:
    # Al revés, para que el orden de la tabla quede como estaba.
    for nombre, _ in reversed(_COLUMNAS):
        op.drop_column("issuer_settings", nombre, schema="fin")
