can ATmega168 deal with 12-bit input?

You would not lose any precision.

Your 12 bit A/D uses SPI communications, meaning the A/D digital value is shifted into the processor one bit at a time through a digital pin. The SPI software routine would would then be responsible for placing the value into a 16 bit integer variable.

When programming in a higher level language, like C, the data width of the underlining hardware processor is mostly transparent to the program.

Lefty