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>);
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;
Finally to set a metadata field(Column), do this...
item[<Field Name>] = <Value>;
//Set More Fields....
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.