--
-- workflow__create_workflow/6
--
create or replace function workflow__create_workflow(
  character varying,
  character varying,
  character varying,
  character varying,
  character varying,
  character varying
) returns varchar as $$

declare
  create_workflow__workflow_key    alias for $1;  
  create_workflow__pretty_name     alias for $2;  
  create_workflow__pretty_plural   alias for $3;  -- default null  
  create_workflow__description     alias for $4;  -- default null
  create_workflow__table_name      alias for $5;  
  create_workflow__id_column       alias for $6;  -- default 'case_id'
  v_num_rows                       integer;
  v_workflow_key                   varchar;
begin
        select count(*) into v_num_rows 
        from pg_class
        where relname = lower(create_workflow__table_name);

        if v_num_rows = 0 then
            raise EXCEPTION '-20000: The table "%"must be created before calling workflow.create_workflow.', create_workflow__table_name;
        end if;

        if substr(create_workflow__workflow_key, 
                  length(create_workflow__workflow_key) - 2, 3) != '_wf' then
            v_workflow_key := create_workflow__workflow_key || '_wf';
        else
            v_workflow_key := create_workflow__workflow_key;
        end if;

        PERFORM acs_object_type__create_type (
            v_workflow_key, 
            create_workflow__pretty_name, 
            create_workflow__pretty_plural,
            'workflow',
            create_workflow__table_name,
            create_workflow__id_column,
            null,
            'f',
            null,
            null
        );

        insert into wf_workflows 
            (workflow_key, description) 
        values 
            (v_workflow_key, create_workflow__description);

        return v_workflow_key;
     
end;$$ language plpgsql;