using System;
using UnityEngine;

namespace AlterchaseSDK
{
    [Serializable]
    public struct AlterchaseBarcode : IEquatable<AlterchaseBarcode>
    {
        public string id;

        public AlterchaseBarcode(string id)
        {
            this.id = id;
        }

        public bool IsValid() => !string.IsNullOrEmpty(id);

        public static AlterchaseBarcode GenerateBarcode()
        {
            return new AlterchaseBarcode(Guid.NewGuid().ToString());
        }

        public bool Equals(AlterchaseBarcode other)
        {
            return id == other.id;
        }

        public override bool Equals(object obj)
        {
            return obj is AlterchaseBarcode barcode && Equals(barcode);
        }

        public override int GetHashCode()
        {
            return id != null ? id.GetHashCode() : 0;
        }

        public static bool operator ==(AlterchaseBarcode left, AlterchaseBarcode right)
        {
            return left.Equals(right);
        }

        public static bool operator !=(AlterchaseBarcode left, AlterchaseBarcode right)
        {
            return !left.Equals(right);
        }

        public override string ToString()
        {
            return id ?? "Invalid";
        }
    }
}
