// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "installer/chromeos_install_config.h"

#include <stdio.h>

#include "installer/cgpt_manager.h"

using std::string;

bool StrToBiosType(string name, BiosType* bios_type) {
  if (name == "secure") {
    *bios_type = kBiosTypeSecure;
  } else if (name == "uboot") {
    *bios_type = kBiosTypeUBoot;
  } else if (name == "legacy") {
    *bios_type = kBiosTypeLegacy;
  } else if (name == "efi") {
    *bios_type = kBiosTypeEFI;
  } else {
    printf("Bios type %s is not one of secure, legacy, efi, or uboot\n",
           name.c_str());
    return false;
  }

  return true;
}

// TODO(jaysri): Unduplicate these methods.
//
// This #define and this function are copied from cgpt.h and
// cgpt_common.c because they aren't currently exported in a
// way we can use.
//
// chromium-os:29457 covers exporting these methods. We should
// use the exported ones as soon as they are available.
#define GUID_STRLEN 37
void GuidToStr(const Guid* guid, char* str, unsigned int buflen) {
  snprintf(str, buflen, "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X",
           le32toh(guid->u.Uuid.time_low), le16toh(guid->u.Uuid.time_mid),
           le16toh(guid->u.Uuid.time_high_and_version),
           guid->u.Uuid.clock_seq_high_and_reserved, guid->u.Uuid.clock_seq_low,
           guid->u.Uuid.node[0], guid->u.Uuid.node[1], guid->u.Uuid.node[2],
           guid->u.Uuid.node[3], guid->u.Uuid.node[4], guid->u.Uuid.node[5]);
}

string Partition::uuid() const {
  CgptManager cgpt;

  if (cgpt.Initialize(base_device()) != kCgptSuccess) {
    printf("CgptManager failed to initialize for %s", base_device().c_str());
    return "";
  }

  Guid guid;

  if (cgpt.GetPartitionUniqueId(number(), &guid) != kCgptSuccess) {
    printf("CgptManager failed to get guid for %d", number());
    return "";
  }

  char guid_str[GUID_STRLEN];
  GuidToStr(&guid, guid_str, GUID_STRLEN);
  return guid_str;
}
