So as @diptarag said there are post of this all over the place, but I guess I can take a crack at giving you what you want.
Add is pretty simple, if you have a valid SPWeb object you can do...
SPFile file = web.Files.Add(<URL to File>,<bytes>,<Overwrite>);
file.Update();
So you build the exact path to where you are placing your file. So if you are placing your file in Share Docs you can do http://yoursite.com/Shared Documents/myfile.txt. There the file will be named myfile.txt and placed in shared docs.
So now the file should be returned as a SPFile object from the add call. To set a content type you must get the content type from the web you are on.
SPContentType contentType = web.ContentType[<Content Type Name>];
Then you can set the content type ID of the list item to that content type's ID. You Also need to get the SPItem of the SPFile.
SPListItem item = file.ListItemAllFields;
item["Content Type ID"] = contentType.Id;
item.Update();
Finally to set a metadata field(Column), do this...
item[<Field Name>] = <Value>;
//Set More Fields....
item.Update();
And that is it. Remember the field names must be valid and the content type you use must be on the list you are adding the document to.