using Microsoft.EntityFrameworkCore.Migrations;

#nullable disable

namespace CatalogDb.Migrations;

/// <inheritdoc />
public partial class Initial : Migration
{
    /// <inheritdoc />
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.CreateSequence(
            name: "catalog_brand_hilo",
            incrementBy: 10);

        migrationBuilder.CreateSequence(
            name: "catalog_hilo",
            incrementBy: 10);

        migrationBuilder.CreateSequence(
            name: "catalog_type_hilo",
            incrementBy: 10);

        migrationBuilder.CreateTable(
            name: "CatalogBrand",
            columns: table => new
            {
                Id = table.Column<int>(type: "integer", nullable: false),
                Brand = table.Column<string>(type: "character varying(100)", maxLength: 100, nullable: false)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_CatalogBrand", x => x.Id);
            });

        migrationBuilder.CreateTable(
            name: "CatalogType",
            columns: table => new
            {
                Id = table.Column<int>(type: "integer", nullable: false),
                Type = table.Column<string>(type: "character varying(100)", maxLength: 100, nullable: false)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_CatalogType", x => x.Id);
            });

        migrationBuilder.CreateTable(
            name: "Catalog",
            columns: table => new
            {
                Id = table.Column<int>(type: "integer", nullable: false),
                Name = table.Column<string>(type: "character varying(50)", maxLength: 50, nullable: false),
                Description = table.Column<string>(type: "text", nullable: true),
                Price = table.Column<decimal>(type: "numeric", nullable: false),
                PictureFileName = table.Column<string>(type: "text", nullable: true),
                CatalogTypeId = table.Column<int>(type: "integer", nullable: false),
                CatalogBrandId = table.Column<int>(type: "integer", nullable: false),
                AvailableStock = table.Column<int>(type: "integer", nullable: false),
                RestockThreshold = table.Column<int>(type: "integer", nullable: false),
                MaxStockThreshold = table.Column<int>(type: "integer", nullable: false),
                OnReorder = table.Column<bool>(type: "boolean", nullable: false)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_Catalog", x => x.Id);
                table.ForeignKey(
                    name: "FK_Catalog_CatalogBrand_CatalogBrandId",
                    column: x => x.CatalogBrandId,
                    principalTable: "CatalogBrand",
                    principalColumn: "Id",
                    onDelete: ReferentialAction.Cascade);
                table.ForeignKey(
                    name: "FK_Catalog_CatalogType_CatalogTypeId",
                    column: x => x.CatalogTypeId,
                    principalTable: "CatalogType",
                    principalColumn: "Id",
                    onDelete: ReferentialAction.Cascade);
            });

        migrationBuilder.CreateIndex(
            name: "IX_Catalog_CatalogBrandId",
            table: "Catalog",
            column: "CatalogBrandId");

        migrationBuilder.CreateIndex(
            name: "IX_Catalog_CatalogTypeId",
            table: "Catalog",
            column: "CatalogTypeId");
    }

    /// <inheritdoc />
    protected override void Down(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.DropTable(
            name: "Catalog");

        migrationBuilder.DropTable(
            name: "CatalogBrand");

        migrationBuilder.DropTable(
            name: "CatalogType");

        migrationBuilder.DropSequence(
            name: "catalog_brand_hilo");

        migrationBuilder.DropSequence(
            name: "catalog_hilo");

        migrationBuilder.DropSequence(
            name: "catalog_type_hilo");
    }
}
