Spintronics: Fundamentals and applications