#!/usr/bin/env python
# -*- coding: utf-8 -*-

# define Interface
##PostgreSQL/PostGIS administration (QGIS 2.x)=group
##Create sequence as default value=name
##Input_layer=vector
##Input_column=field Input_layer

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import *

from qgis.core import *
from qgis.gui import *
from qgis.utils import *

import psycopg2
import re

# get input parameters from GUI
inlayer = processing.getObject(Input_layer)
inlayer_dp = inlayer.dataProvider().dataSourceUri()

# get database parameters (input layer)
db_name = QgsDataSourceURI(inlayer_dp).database()
db_host = QgsDataSourceURI(inlayer_dp).host()
db_user = QgsDataSourceURI(inlayer_dp).username()
db_password = QgsDataSourceURI(inlayer_dp).password()

# get input layer parameters
inlayer_schema = QgsDataSourceURI(inlayer_dp).schema()
inlayer_table = QgsDataSourceURI(inlayer_dp).table()
inlayer_column = Input_column

# check input layer
provider = inlayer.dataProvider()
if provider.name() != 'postgres':
        raise RuntimeError('Input layer is not a PostGIS table.')

# connect to database
conn = psycopg2.connect( "dbname={0} host={1} user={2} password={3}".format( db_name, db_host, db_user, db_password ) )

# create and run query
with conn.cursor() as curs:
    sql = """CREATE SEQUENCE "{0}"."{1}_{2}_seq" OWNED BY "{0}"."{1}"."{2}";
    SELECT SETVAL('"{0}"."{1}_{2}_seq"', (SELECT MAX("{2}") FROM "{0}"."{1}"));
    ALTER TABLE "{0}"."{1}"
    ALTER COLUMN "{2}" SET DEFAULT nextval('"{0}"."{1}_{2}_seq"'::regclass);
    """.format ( inlayer_schema, inlayer_table, inlayer_column )
    
    curs.execute(sql)

    # commit changes if everything went OK
    conn.commit()

# reload input layer
inlayer.setDataSource( inlayer.source(), inlayer.name(), inlayer.providerType() )
