#
# Tabele dla XPlagiator`a
# XPDT
#

# Najpierw tworzymy bazę xp
DROP DATABASE xp;
CREATE DATABASE xp;
USE xp;

#
# Część USOSWeb`owa
#

CREATE TABLE XP_OSOBY (
  ID BIGINT NOT NULL,
  PESEL CHAR(11),
  INDEKS BIGINT,
  IMIE VARCHAR(20) NOT NULL,
  NAZWISKO VARCHAR(40) NOT NULL,
  EMAIL VARCHAR(100),
  PLEC CHAR(1),
#
# tutaj dodać profil //voiron
#
  PROFIL TEXT,
  WYSYLAC_EMAIL CHAR DEFAULT 'N'
);

CREATE TABLE XP_PRZEDMIOTY (
  KOD VARCHAR(20) NOT NULL,
  NAZWA VARCHAR(100) NOT NULL,
  OPIS TEXT,
  TPRO_KOD VARCHAR(20) NOT NULL
);

CREATE TABLE XP_CYKLE_DYDAKTYCZNE (
  KOD VARCHAR(20) NOT NULL,
  OPIS VARCHAR(100) NOT NULL,
  DATA_OD DATETIME NOT NULL,
  DATA_DO DATETIME NOT NULL,
  DATA_ZAKON DATETIME NOT NULL,
  STATUS_CYKLU CHAR DEFAULT 'A' NOT NULL,
  XP_OBSLUGA CHAR DEFAULT 'Y' NOT NULL 
);

CREATE TABLE XP_PROWADZACY_PRZEDMIOTY_CYKLI (
  ID BIGINT NOT NULL,
  PRZ_KOD VARCHAR(20) NOT NULL,
  CDYD_KOD VARCHAR(20) NOT NULL,
  PRAC_ID BIGINT
);

CREATE TABLE XP_ZAJECIA_CYKLI (
  ID BIGINT NOT NULL,
  PRZ_KOD VARCHAR(20) NOT NULL,
  CDYD_KOD VARCHAR(20) NOT NULL,
  TZAJ_KOD VARCHAR(20) NOT NULL,
  XP_OBSLUGA CHAR DEFAULT 'N' NOT NULL 
);

# Czy ta tabela jest do czegoś potrzebna?
# //voiron
#CREATE TABLE XP_GRUPY (
#  NR BIGINT NOT NULL,
#  ZAJ_CYK_ID BIGINT NOT NULL,
#  UTW_ID VARCHAR(30)  NOT NULL,
#  UTW_DATA DATETIME  NOT NULL
#);

CREATE TABLE XP_OSOBY_GRUP (
  GR_NR BIGINT NOT NULL,
  OS_ID BIGINT NOT NULL,
  ZAJ_CYK_ID BIGINT NOT NULL
);

CREATE TABLE XP_PROWADZACY_GRUP (
  GR_NR BIGINT NOT NULL,
  ZAJ_CYK_ID BIGINT NOT NULL,
  PRAC_ID INT NOT NULL,
  OPERATOR CHAR DEFAULT 'N' NOT NULL
);


ALTER TABLE XP_OSOBY
  ADD PRIMARY KEY (ID)
;

ALTER TABLE XP_PRZEDMIOTY
  ADD PRIMARY KEY (KOD)
;

ALTER TABLE XP_CYKLE_DYDAKTYCZNE
 ADD PRIMARY KEY (KOD)
;

ALTER TABLE XP_PROWADZACY_PRZEDMIOTY_CYKLI
  ADD PRIMARY KEY (ID)
;

ALTER TABLE XP_ZAJECIA_CYKLI
  ADD PRIMARY KEY (ID)
;

# Redukcja tabeli...
# //voiron
#ALTER TABLE XP_GRUPY
#  ADD PRIMARY KEY (
#    NR,
#    ZAJ_CYK_ID
#  );

ALTER TABLE XP_OSOBY_GRUP
  ADD PRIMARY KEY (
    OS_ID,
    ZAJ_CYK_ID
  );

#lc189379 - moje
ALTER TABLE XP_PROWADZACY_GRUP
  ADD PRIMARY KEY (
    PRAC_ID,
    ZAJ_CYK_ID,
    GR_NR
  );

#
# Tabele XPlagiator`a
#

CREATE TABLE XP_ZADANIE (
  ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
  ZAJ_CYKLI BIGINT NOT NULL REFERENCES XP_ZAJECIA_CYLKI,
  AUTOR BIGINT NOT NULL REFERENCES XP_OSOBY,
  NUMER_ZAD INT NOT NULL,
  LINK_URL VARCHAR(255),
  NAZWA VARCHAR(64),
  TERMIN1 DATETIME NOT NULL,
  TERMIN2 DATETIME,
  POBLAZANIE INT DEFAULT 24 NOT NULL,
  ZAKRES_SPR INT DEFAULT 0 NOT NULL,
  # znaczenie zakresu:
  # 0 - nic
  # 1 - w grupie
  # 3 - globalnie (znaczy z innymi grupami)
  # reszta nieuzywane <-> 0
  POZIOM_SPR INT DEFAULT 0 NOT NULL,
  #znaczenie poziomu - bity
  # 0. - czy ma byc liczenie slow kluczowych (1-tak, 0-nie)
  # 1. - czy ma byc diff (jw)
  # reszta - glebokosc sprawdzania modulem, mozna dac jakies na stale - np 4.
  # czyli np 13 = (1101)b znaczy modul glebokosc=3, zliczanie slow, bez diff
  UTW_DATE DATETIME,
  MOD_DATE DATETIME,
  PRIMARY KEY (ID)
);

CREATE TABLE XP_ZADANIE_GRUPY (
  ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
  GR_NR BIGINT NOT NULL,
  ID_ZAD INT UNSIGNED NOT NULL REFERENCES XP_ZADANIE,
  GR_TERMIN1 DATETIME,
  NALEZY CHAR NOT NULL DEFAULT 'Y',
  ZAKRES_SPR INT DEFAULT 0 NOT NULL,
  POZIOM_SPR INT DEFAULT 0 NOT NULL,
  PRIMARY KEY (ID)
);

# Upss, wycofuje się z tej tabeli
#
#CREATE TABLE XP_TERMIN (
#  ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
#  ID_ZAD INT UNSIGNED NOT NULL REFERENCES XP_ZADANIE,
#  NR_GR BIGINT NOT NULL REFERENCES XP_GRUPY,
#  GR_ZAJ_CYKLI BIGINT NOT NULL REFERENCES XP_GRUPY,
#  RODZAJ CHAR DEFAULT 'A' NOT NULL,
#  TERMIN DATETIME NOT NULL,
#  PRIMARY KEY (ID)
#);

CREATE TABLE XP_ODDANE_PRACE (
  ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  ID_STUD BIGINT NOT NULL REFERENCES XP_OSOBY,
  ID_ZAD INT UNSIGNED NOT NULL REFERENCES XP_ZADANIE,
  ODDANIE DATETIME NOT NULL,
  FILE VARCHAR(255),
# wanted by osa
  STATUS CHAR NOT NULL DEFAULT 'A',
  ROZMIAR INT,
  PRIMARY KEY (ID)
);

CREATE TABLE XP_PLAGIAT (
  ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  ID_ZAD1 INT UNSIGNED NOT NULL REFERENCES XP_ODDANE_PRACE,
  ID_ZAD2 INT UNSIGNED NOT NULL REFERENCES XP_ODDANE_PRACE,
#  to nie może być tak prosto... //voiron
  WC 	INT DEFAULT 0 NOT NULL,
  DIFF1 INT DEFAULT 0 NOT NULL,
  DIFF2 INT DEFAULT 0 NOT NULL,
  MOD1  INT DEFAULT 0 NOT NULL,
  MOD2  INT DEFAULT 0 NOT NULL,
  MOD3  INT DEFAULT 0 NOT NULL,
  OPIS VARCHAR(255),
  PRIMARY KEY (ID)
);

CREATE TABLE XP_KOLEJKA_SPRAWDZANIA (
  ID INT NOT NULL AUTO_INCREMENT,
  STUD_ID BIGINT NOT NULL REFERENCES XP_OSOBY,
  ID_ZAD INT NOT NULL REFERENCES XP_ZADANIE,
  ODDANIE DATETIME,
  FILE VARCHAR(255),
# wanted by osa
  ZAJ_CYK_ID BIGINT NOT NULL REFERENCES XP_ZAJECIA_CYKLI,
  GR_NR BIGINT NOT NULL,
  ID_PRAC INT UNSIGNED NOT NULL REFERENCES XP_ODDANE_PRACE,
  ZAKRES_SPR INT DEFAULT 0 NOT NULL,
  POZIOM_SPR INT DEFAULT 0 NOT NULL,
  PRIMARY KEY (ID)
);

# blokowanie calosci systemu - znaczenie: 
# tryb=1 blokada logowania, tryb=2 blokada systemu, brak - OK
CREATE TABLE XP_BLOKADA (
  TRYB INT,
  ZALOZONA DATETIME
);

GRANT ALL PRIVILEGES ON xp.* TO xpweb@localhost
IDENTIFIED BY 'xpweb' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON xp.* TO xpweb@"%"
IDENTIFIED BY 'xpweb' WITH GRANT OPTION;


