using FluentMigrator;
namespace Mercados.Database.Migrations
{
    // El número es la versión única de esta migración.
    // Usar un timestamp es una práctica común y segura.
    [Migration(20250701113000)]
    public class CreateInitialTables : Migration
    {
        /// 
        /// Define las acciones a realizar para aplicar la migración (crear tablas, etc.).
        /// 
        public override void Up()
        {
            // --- Tabla para Cotizaciones de Ganado ---
            Create.Table("CotizacionesGanado")
                .WithColumn("Id").AsInt64().PrimaryKey().Identity() // Usamos Int64 (long) para los IDs
                .WithColumn("Categoria").AsString(100).NotNullable()
                .WithColumn("Especificaciones").AsString(200).NotNullable()
                .WithColumn("Maximo").AsDecimal(18, 2).NotNullable()
                .WithColumn("Minimo").AsDecimal(18, 2).NotNullable()
                .WithColumn("Promedio").AsDecimal(18, 2).NotNullable()
                .WithColumn("Mediano").AsDecimal(18, 2).NotNullable()
                .WithColumn("Cabezas").AsInt32().NotNullable()
                .WithColumn("KilosTotales").AsInt32().NotNullable()
                .WithColumn("KilosPorCabeza").AsInt32().NotNullable()
                .WithColumn("ImporteTotal").AsDecimal(18, 2).NotNullable()
                .WithColumn("FechaRegistro").AsDateTime().NotNullable();
            // --- Tabla para Cotizaciones de Granos ---
            Create.Table("CotizacionesGranos")
                .WithColumn("Id").AsInt64().PrimaryKey().Identity()
                .WithColumn("Nombre").AsString(50).NotNullable()
                .WithColumn("Precio").AsDecimal(18, 2).NotNullable()
                .WithColumn("VariacionPrecio").AsDecimal(18, 2).NotNullable()
                .WithColumn("FechaOperacion").AsDateTime().NotNullable()
                .WithColumn("FechaRegistro").AsDateTime().NotNullable();
            // --- Tabla para Cotizaciones de Bolsa ---
            Create.Table("CotizacionesBolsa")
                .WithColumn("Id").AsInt64().PrimaryKey().Identity()
                .WithColumn("Ticker").AsString(20).NotNullable()
                .WithColumn("Mercado").AsString(50).NotNullable() // "EEUU", "Local"
                .WithColumn("PrecioActual").AsDecimal(18, 2).NotNullable()
                .WithColumn("Apertura").AsDecimal(18, 2).NotNullable()
                .WithColumn("CierreAnterior").AsDecimal(18, 2).NotNullable()
                .WithColumn("PorcentajeCambio").AsDecimal(18, 4).NotNullable() // Más precisión para porcentajes
                .WithColumn("FechaRegistro").AsDateTime().NotNullable();
            // --- Tabla para auditar las fuentes de datos ---
            Create.Table("FuentesDatos")
                .WithColumn("Id").AsInt64().PrimaryKey().Identity()
                .WithColumn("Nombre").AsString(100).NotNullable().Unique() // El nombre debe ser único
                .WithColumn("UltimaEjecucionExitosa").AsDateTime().NotNullable()
                .WithColumn("Url").AsString(500).Nullable();
        }
        /// 
        /// Define las acciones para revertir la migración (eliminar las tablas).
        /// Esto es útil si necesitas deshacer un cambio.
        /// 
        public override void Down()
        {
            Delete.Table("FuentesDatos");
            Delete.Table("CotizacionesBolsa");
            Delete.Table("CotizacionesGranos");
            Delete.Table("CotizacionesGanado");
        }
    }
}