using System;
using Microsoft.EntityFrameworkCore.Migrations;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace Infrastructure.Migrations
{
    /// 
    public partial class Initial : Migration
    {
        /// 
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.CreateTable(
                name: "PlaceOfWork",
                columns: table => new
                {
                    Id = table.Column(type: "uuid", nullable: false),
                    Name = table.Column(type: "character varying(200)", unicode: false, maxLength: 200, nullable: false),
                    Address_Country = table.Column(type: "character varying(70)", unicode: false, maxLength: 70, nullable: false),
                    Address_City = table.Column(type: "character varying(70)", unicode: false, maxLength: 70, nullable: false),
                    Address_Street = table.Column(type: "character varying(100)", unicode: false, maxLength: 100, nullable: false),
                    Address_Building = table.Column(type: "character varying(10)", unicode: false, maxLength: 10, nullable: false),
                    PhoneNum = table.Column(type: "character varying(13)", unicode: false, maxLength: 13, nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_PlaceOfWork", x => x.Id);
                });
            migrationBuilder.CreateTable(
                name: "User",
                columns: table => new
                {
                    Id = table.Column(type: "uuid", nullable: false),
                    Role = table.Column(type: "integer", nullable: false),
                    Email = table.Column(type: "character varying(254)", unicode: false, maxLength: 254, nullable: false),
                    Password = table.Column(type: "character varying(50)", unicode: false, maxLength: 50, nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_User", x => x.Id);
                });
            migrationBuilder.CreateTable(
                name: "Applicant",
                columns: table => new
                {
                    Id = table.Column(type: "uuid", nullable: false),
                    UserId = table.Column(type: "uuid", nullable: false),
                    Name_FirstName = table.Column(type: "character varying(50)", unicode: false, maxLength: 50, nullable: false),
                    Name_Surname = table.Column(type: "character varying(50)", unicode: false, maxLength: 50, nullable: false),
                    Name_Patronymic = table.Column(type: "character varying(50)", unicode: false, maxLength: 50, nullable: true),
                    Passport_Number = table.Column(type: "character varying(20)", unicode: false, maxLength: 20, nullable: false),
                    Passport_Issuer = table.Column(type: "character varying(200)", unicode: false, maxLength: 200, nullable: false),
                    Passport_IssueDate = table.Column(type: "timestamp with time zone", nullable: false),
                    Passport_ExpirationDate = table.Column(type: "timestamp with time zone", nullable: false),
                    BirthDate = table.Column(type: "timestamp with time zone", nullable: false),
                    CountryOfBirth = table.Column(type: "character varying(70)", unicode: false, maxLength: 70, nullable: false),
                    CityOfBirth = table.Column(type: "character varying(70)", unicode: false, maxLength: 70, nullable: false),
                    Citizenship = table.Column(type: "character varying(30)", unicode: false, maxLength: 30, nullable: false),
                    CitizenshipByBirth = table.Column(type: "character varying(30)", unicode: false, maxLength: 30, nullable: false),
                    Gender = table.Column(type: "integer", nullable: false),
                    MaritalStatus = table.Column(type: "integer", nullable: false),
                    FatherName_FirstName = table.Column(type: "character varying(50)", unicode: false, maxLength: 50, nullable: false),
                    FatherName_Surname = table.Column(type: "character varying(50)", unicode: false, maxLength: 50, nullable: false),
                    FatherName_Patronymic = table.Column(type: "character varying(50)", unicode: false, maxLength: 50, nullable: true),
                    MotherName_FirstName = table.Column(type: "character varying(50)", unicode: false, maxLength: 50, nullable: false),
                    MotherName_Surname = table.Column(type: "character varying(50)", unicode: false, maxLength: 50, nullable: false),
                    MotherName_Patronymic = table.Column(type: "character varying(50)", unicode: false, maxLength: 50, nullable: true),
                    JobTitle = table.Column(type: "character varying(50)", unicode: false, maxLength: 50, nullable: false),
                    PlaceOfWorkId = table.Column(type: "uuid", nullable: false),
                    IsNonResident = table.Column(type: "boolean", nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_Applicant", x => x.Id);
                    table.ForeignKey(
                        name: "FK_Applicant_PlaceOfWork_PlaceOfWorkId",
                        column: x => x.PlaceOfWorkId,
                        principalTable: "PlaceOfWork",
                        principalColumn: "Id",
                        onDelete: ReferentialAction.Cascade);
                    table.ForeignKey(
                        name: "FK_Applicant_User_UserId",
                        column: x => x.UserId,
                        principalTable: "User",
                        principalColumn: "Id",
                        onDelete: ReferentialAction.Cascade);
                });
            migrationBuilder.CreateTable(
                name: "VisaApplication",
                columns: table => new
                {
                    Id = table.Column(type: "uuid", nullable: false),
                    ApplicantId = table.Column(type: "uuid", nullable: false),
                    Status = table.Column(type: "integer", nullable: false),
                    ReentryPermit_Number = table.Column(type: "character varying(25)", unicode: false, maxLength: 25, nullable: true),
                    ReentryPermit_ExpirationDate = table.Column(type: "timestamp with time zone", nullable: true),
                    DestinationCountry = table.Column(type: "character varying(70)", unicode: false, maxLength: 70, nullable: false),
                    PermissionToDestCountry_ExpirationDate = table.Column(type: "timestamp with time zone", nullable: true),
                    PermissionToDestCountry_Issuer = table.Column(type: "character varying(200)", unicode: false, maxLength: 200, nullable: true),
                    VisaCategory = table.Column(type: "integer", nullable: false),
                    ForGroup = table.Column(type: "boolean", nullable: false),
                    RequestedNumberOfEntries = table.Column(type: "integer", nullable: false),
                    RequestDate = table.Column(type: "timestamp with time zone", nullable: false),
                    ValidDaysRequested = table.Column(type: "integer", nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_VisaApplication", x => x.Id);
                    table.ForeignKey(
                        name: "FK_VisaApplication_Applicant_ApplicantId",
                        column: x => x.ApplicantId,
                        principalTable: "Applicant",
                        principalColumn: "Id",
                        onDelete: ReferentialAction.Cascade);
                });
            migrationBuilder.CreateTable(
                name: "PastVisa",
                columns: table => new
                {
                    VisaApplicationId = table.Column(type: "uuid", nullable: false),
                    Id = table.Column(type: "integer", nullable: false)
                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
                    IssueDate = table.Column(type: "timestamp with time zone", nullable: false),
                    Name = table.Column(type: "character varying(70)", unicode: false, maxLength: 70, nullable: false),
                    ExpirationDate = table.Column(type: "timestamp with time zone", nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_PastVisa", x => new { x.VisaApplicationId, x.Id });
                    table.ForeignKey(
                        name: "FK_PastVisa_VisaApplication_VisaApplicationId",
                        column: x => x.VisaApplicationId,
                        principalTable: "VisaApplication",
                        principalColumn: "Id",
                        onDelete: ReferentialAction.Cascade);
                });
            migrationBuilder.CreateTable(
                name: "PastVisit",
                columns: table => new
                {
                    VisaApplicationId = table.Column(type: "uuid", nullable: false),
                    Id = table.Column(type: "integer", nullable: false)
                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
                    StartDate = table.Column(type: "timestamp with time zone", nullable: false),
                    EndDate = table.Column(type: "timestamp with time zone", nullable: false),
                    DestinationCountry = table.Column(type: "character varying(70)", unicode: false, maxLength: 70, nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_PastVisit", x => new { x.VisaApplicationId, x.Id });
                    table.ForeignKey(
                        name: "FK_PastVisit_VisaApplication_VisaApplicationId",
                        column: x => x.VisaApplicationId,
                        principalTable: "VisaApplication",
                        principalColumn: "Id",
                        onDelete: ReferentialAction.Cascade);
                });
            migrationBuilder.CreateIndex(
                name: "IX_Applicant_PlaceOfWorkId",
                table: "Applicant",
                column: "PlaceOfWorkId");
            migrationBuilder.CreateIndex(
                name: "IX_Applicant_UserId",
                table: "Applicant",
                column: "UserId",
                unique: true);
            migrationBuilder.CreateIndex(
                name: "IX_User_Email",
                table: "User",
                column: "Email",
                unique: true);
            migrationBuilder.CreateIndex(
                name: "IX_VisaApplication_ApplicantId",
                table: "VisaApplication",
                column: "ApplicantId");
        }
        /// 
        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropTable(
                name: "PastVisa");
            migrationBuilder.DropTable(
                name: "PastVisit");
            migrationBuilder.DropTable(
                name: "VisaApplication");
            migrationBuilder.DropTable(
                name: "Applicant");
            migrationBuilder.DropTable(
                name: "PlaceOfWork");
            migrationBuilder.DropTable(
                name: "User");
        }
    }
}