#include <stdio.h>
#include "crs.h"

int main()
{
    char *errstr = NULL;

    CRS *c = NULL;
    PROJCS *p = NULL;

    char *str1 = "PROJCS[\"NAD83 / BC Albers\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Albers_Conic_Equal_Area\"], PARAMETER[\"standard_parallel_1\",50],PARAMETER[\"standard_parallel_2\",58.5],PARAMETER[\"latitude_of_center\",45],PARAMETER[\"longitude_of_center\",-126],PARAMETER[\"false_easting\",1000000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AUTHORITY[\"EPSG\",\"3005\"]]";
    char *str2 = "PROJCS[\"ETRS89 / Belgian Lambert 2008\",GEOGCS[\"ETRS89\",DATUM[\"European Terrestrial Reference System 1989\",SPHEROID[\"GRS 1980\",6378137.0,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0.0,0.0,0.0,0.0,0.0,0.0,0.0],AUTHORITY[\"EPSG\",\"6258\"]],PRIMEM[\"Greenwich\",0.0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943295],AXIS[\"Geodetic latitude\",NORTH],AXIS[\"Geodetic longitude\",EAST],AUTHORITY[\"EPSG\",\"4258\"]],PROJECTION[\"Lambert Conic Conformal (2SP)\",AUTHORITY[\"EPSG\",\"9802\"]],PARAMETER[\"central_meridian\",4.359215833333335],PARAMETER[\"latitude_of_origin\",50.79781500000001],PARAMETER[\"standard_parallel_1\",49.833333333333336],PARAMETER[\"false_easting\",649328.0],PARAMETER[\"false_northing\",665262.0],PARAMETER[\"standard_parallel_2\",51.16666666666667],UNIT[\"m\",1.0],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"3812\"]]";

    if ( crs_from_wkt_string(str1, &c, &errstr) == CRS_SUCCESS ) 
    {
        p = (PROJCS*)c;
        printf("projcs name %s\n", p->name);
        printf("geogcs name %s\n", p->geogcs->name);
        printf("geogcs unit %s, %12.8g\n", p->geogcs->unit->name, p->geogcs->unit->conversion);
        printf("spheroid semimajor %12.8g\n", p->geogcs->datum->spheroid->semimajor);
        crs_projcs_free(p);
    }
    else 
    {
        crsnotice(errstr);
        if ( errstr ) free(errstr);
    }
    
    if ( crs_from_wkt_string(str2, &c, &errstr) == CRS_SUCCESS ) 
    {
        p = (PROJCS*)c;
        printf("projcs name %s\n", p->name);
        printf("geogcs name %s\n", p->geogcs->name);
        printf("geogcs unit %s, %12.8g\n", p->geogcs->unit->name, p->geogcs->unit->conversion);
        printf("spheroid semimajor %12.8g\n", p->geogcs->datum->spheroid->semimajor);
        crs_projcs_free(p);
    }
    else
    {
        crsnotice(errstr);
        if ( errstr ) free(errstr);
    }
    
    return 1;
}

