CREATE TABLE IF NOT EXISTS Users (
    id INTEGER PRIMARY KEY,
    username TEXT NOT NULL UNIQUE,
    password TEXT NOT NULL,
    first_name TEXT NOT NULL,
    last_name TEXT NOT NULL,
    email TEXT NOT NULL UNIQUE,
    phone TEXT NOT NULL,
    role TEXT NOT NULL
);

CREATE TABLE IF NOT EXISTS Categories (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL UNIQUE
);

INSERT INTO Categories (name) VALUES ("Car Parts");
INSERT INTO Categories (name) VALUES ("Animals");
INSERT INTO Categories (name) VALUES ("Sports");
INSERT INTO Categories (name) VALUES ("Books");
INSERT INTO Categories (name) VALUES ("Phones");
INSERT INTO Categories (name) VALUES ("Music");

CREATE TABLE IF NOT EXISTS Products (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    image TEXT NOT NULL,
    description TEXT NOT NULL,
    cost DECIMAL NOT NULL,
    sellerID INTEGER NOT NULL
        REFERENCES Users (id)
            ON DELETE CASCADE 
            ON UPDATE NO ACTION,
    categoryID INTEGER NOT NULL
        REFERENCES Categories (id)
            ON DELETE CASCADE 
            ON UPDATE NO ACTION,
    postedDate TIMESTAMP,
    quantityAvailable INTEGER DEFAULT 0
);

CREATE TABLE IF NOT EXISTS Orders (
    id INTEGER PRIMARY KEY,
    sellerID TEXT NOT NULL
        REFERENCES Users (id)
            ON DELETE NO ACTION
            ON UPDATE NO ACTION,
    total DECIMAL NOT NULL,
    buyerID INTEGER NOT NULL
        REFERENCES Users (id)
            ON DELETE CASCADE 
            ON UPDATE NO ACTION,
    orderDate TIMESTAMP NOT NULL
);

CREATE TABLE IF NOT EXISTS Views (
    id INTEGER PRIMARY KEY,
    userID INTEGER
        REFERENCES Users (id)
        ON DELETE CASCADE
        ON UPDATE NO ACTION,
    productID INTEGER NOT NULL
        REFERENCES Products (id)
        ON DELETE CASCADE
        ON UPDATE NO ACTION,
    viewDate TIMESTAMP NOT NULL
)
