#!/usr/bin/env python3

import sqlite3 as sqlite

conn = sqlite.connect('database.db')
conn.isolation_level = None  # so we don't have to use self.connection.commit()
curs = conn.cursor()

curs.execute(
    '''
    CREATE TABLE Groups (
    group_id INTEGER PRIMARY KEY,
    name     VARCHAR UNIQUE
                     NOT NULL
);
'''
)

curs.execute(
    '''
    CREATE TABLE Member (
    member_id INTEGER PRIMARY KEY AUTOINCREMENT,
    name      VARCHAR,
    group_id  INTEGER REFERENCES Groups (group_id) ON DELETE CASCADE,
    UNIQUE (
        name,
        group_id
    )
);
'''
)

curs.execute(
    '''
    CREATE TABLE Distribution (
    distribution_id INTEGER  PRIMARY KEY AUTOINCREMENT,
    name            VARCHAR  NOT NULL,
    creation_time   DATETIME DEFAULT (CURRENT_TIMESTAMP),
    group_id                 REFERENCES Groups (group_id) ON DELETE CASCADE
);
'''
)

curs.execute(
    '''
    CREATE TABLE Team (
    team_id         INTEGER PRIMARY KEY AUTOINCREMENT,
    name            VARCHAR,
    distribution_id INTEGER REFERENCES Distribution (distribution_id) ON DELETE CASCADE
                            NOT NULL
);'''
)

curs.execute(
    '''
    CREATE TABLE Member_to_Team (
    member_id INTEGER REFERENCES Member (member_id) ON DELETE CASCADE,
    team_id   INTEGER REFERENCES Team (team_id) ON DELETE CASCADE,
    PRIMARY KEY (
        team_id,
        member_id
    )
);
'''
)

curs.execute(
    '''
    SELECT t1.member_id member_id,
       t2.member_id With_member_id,
       count( * ) times_together
    FROM Member_to_Team t1
       JOIN
       Member_to_Team t2 ON t1.team_id = t2.team_id AND 
                            t1.member_id != t2.member_id
       JOIN
       Member ON t2.member_id = Member.member_id
    GROUP BY t1.member_id,
                  t2.member_id
'''
)