require "binary_struct"

module VirtDisk
  class Partition < ClientHead
    attr_reader :start_lba, :end_lba, :ptype, :pnum

    MBR_SIZE = 512
    DOS_SIG  = "55aa"
    GPT_SIG  = 238

    DOS_PARTITION_ENTRY = BinaryStruct.new([
      'C', :bootable,
      'C', :startCHS0,
      'C', :startCHS1,
      'C', :startCHS2,
      'C', :ptype,
      'C', :endCHS0,
      'C', :endCHS1,
      'C', :endCHS1,
      'L', :start_lba,
      'L', :part_size
    ])
    PTE_LEN      = DOS_PARTITION_ENTRY.size
    DOS_PT_START = 446

    def initialize(disk, ptype, pnum, start_lba, end_lba)
      super(disk)

      @start_lba        = start_lba
      @end_lba          = end_lba
      @ptype            = ptype
      @pnum             = pnum
      @start_byte_addr  = @start_lba * block_size
      @end_byte_addr    = @end_lba * block_size
      @seek_pos         = @start_byte_addr
      @size             = @end_byte_addr - @start_byte_addr
    end
  end
end