class Init < ActiveRecord::Migration[6.0]
  def change
    create_table :domains do |t|
      t.string :name # ascii, utf8 will be converted on the fly
      t.integer :registrar_id # registripidaja
      t.datetime :registered_at
      t.string :status
      t.datetime :valid_from
      t.datetime :valid_to
      t.integer :owner_contact_id
      t.integer :admin_contact_id
      t.integer :technical_contact_id
      t.integer :ns_set_id
      t.string :auth_info
      # t.integer :keyset_id #dnssec

      t.timestamps
    end

    # this will be a huge table?
    create_table :contacts do |t|
      t.string :code # CID:STRING:OID
      t.string :name
      t.string :type # organisation / juridical / citizen #rails specific variable
      t.string :reg_no # identity code or registration number for organisation

      # can a person have one or more of these contacts?
      t.string :phone
      t.string :email
      t.string :fax

      t.timestamps
    end

    create_table :addresses do |t| # needs a better name?
      t.integer :contact_id
      t.integer :country_id
      t.string :city
      t.string :address # Street + house + apartment #needs a better name
      t.string :zip

      t.timestamps
    end

    create_table :country_id do |t|
      t.string :iso
      t.string :name

      t.timestamps
    end

    create_table :registrars do |t|
      t.string :name
      t.string :reg_no
      t.string :vat_no
      t.string :address
      t.integer :country_id
      t.string :billing_address

      t.timestamps
    end

    # legal documents
    # create_table :documents do |t|
    #   t.integer :domain_id
    #   t.string :name
    #   t.status :document_type #if this is registration document or deletion document

    #   t.timestamps
    # end

    create_table :ns_sets do |t|
      t.string :code # NSSID:STRING:OID
      t.integer :registrar_id
      t.string :auth_info # password for transferring between registrants
      t.string :report_level

      # t.integer :technical_contact_id # reference to technical contact -
      # does each ns_set have spearate technical contacts or can the contacts be inherited from the registrar?

      t.timestamps
    end

    create_table :nameservers_ns_sets do |t|
      t.integer :nameserver_id
      t.integer :ns_set_id
    end

    create_table :nameservers do |t|
      t.string :name
      t.string :ip
      t.integer :ns_set_id

      t.timestamps
    end

    # devise for login
    # cancan for securing
    # what to do with API users?
    create_table :users do |t|
      t.string :username
      t.string :password
      t.integer :role_id # can user have more than one role?

      t.timestamps
    end

    create_table :roles do |t|
      t.string :name

      t.timestamps
    end

    create_table :rights_roles do |t|
      t.integer :right_id
      t.integer :role_id
    end

    create_table :rights do |t|
      t.string :code # LOG_IN, SEE_DOMAINS, etc

      t.timestamps
    end
  end
end
