With the advancement of solid-state devices for lighting, illumination is on the verge of being completely restructured. This revolution comes with numerous advantages and viable opportunities that can transform the world of wireless communications for the better. Solid-state LEDs are rapidly replacing the contemporary incandescent and fluorescent lamps. In addition to their high energy efficiency, LEDs are desirable for their low heat generation, long lifespan, and their capability to switch on and off at an extremely high rate. The ability of switching between different levels of luminous intensity at such a rate has enabled the inception of a new communication technology referred to as visible light communication (VLC). With this technology, the LED lamps are additionally being used for data transmission. This paper provides a tutorial and a survey of VLC in terms of the design, development, and evaluation techniques as well as current challenges and their envisioned solutions. The focus of this paper is mainly directed towards an indoor setup. An overview of VLC, theory of illumination, system receivers, system architecture, and ongoing developments are provided. We further provide some baseline simulation results to give a technical background on the performance of VLC systems. Moreover, we provide the potential of incorporating VLC techniques in the current and upcoming technologies such as fifth-generation (5G), beyond fifth-generation (B5G) wireless communication trends including sixth-generation (6G), and intelligent reflective surfaces (IRSs) among others.