USE asterisk_db;

show tables;
CREATE TABLE ps_endpoints (
  id VARCHAR(40) NOT NULL PRIMARY KEY,
  transport VARCHAR(40) NULL,
  aors VARCHAR(200) NULL UNIQUE,
  auth VARCHAR(40) NULL UNIQUE,
  context VARCHAR(40) NULL,
  disallow VARCHAR(200) NULL,
  allow VARCHAR(200) NULL,
  direct_media VARCHAR(40) NULL,
  connected_line_method VARCHAR(40) NULL,
  callerid VARCHAR(40) NULL,
  dtmf_mode VARCHAR(40) NULL
);

CREATE TABLE ps_auths (
  id VARCHAR(40) NOT NULL PRIMARY KEY,
  auth_type VARCHAR(40) NOT NULL,
  username VARCHAR(40) NULL UNIQUE,
  password VARCHAR(40) NULL,
  md5_cred VARCHAR(40) NULL,
  realm VARCHAR(40) NULL
);

CREATE TABLE ps_aors (
  id VARCHAR(40) NOT NULL PRIMARY KEY,
  max_contacts INTEGER USE asterisk_db;
NULL
);


CREATE TABLE extensions_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    context VARCHAR(50) NOT NULL,
    exten VARCHAR(50) NOT NULL UNIQUE,
    priority INT NOT NULL,
    app VARCHAR(50) NOT NULL,
    appdata VARCHAR(100)
);



INSERT INTO ps_endpoints (id, transport, aors, auth, context, disallow, allow) 
VALUES ('1001', 'transport-udp', '1001', '1001', 'default', 'all', 'ulaw,alaw');

INSERT INTO ps_auths (id, auth_type, username, password) 
VALUES ('1001', 'userpass', '1001', '12345');

INSERT INTO ps_aors (id, max_contacts) 
VALUES ('1001', 1);


-- Add Endpoint for 1002
INSERT INTO ps_endpoints (id, transport, aors, auth, context, disallow, allow, direct_media) 
VALUES ('1002', 'transport-udp', '1002', '1002', 'default', 'all', 'ulaw,alaw', 'no');

-- Add Authentication for 1002
INSERT INTO ps_auths (id, auth_type, username, password) 
VALUES ('1002', 'userpass', '1002', '12345');

-- Add AOR (Address of Record) for 1002
INSERT INTO ps_aors (id, max_contacts) 
VALUES ('1002', 2);

INSERT INTO ps_endpoints (id, transport, aors, auth, context, disallow, allow, direct_media) 
VALUES ('1003', 'transport-udp', '1003', '1003', 'default', 'all', 'ulaw,alaw', 'no');

-- Add Authentication for 1002
INSERT INTO ps_auths (id, auth_type, username, password) 
VALUES ('1003', 'userpass', '1003', '12345');

-- Add AOR (Address of Record) for 1002
INSERT INTO ps_aors (id, max_contacts) 
VALUES ('1003', 2);


INSERT INTO extensions_table (context, exten, priority, app, appdata) 
VALUES 
('default', '1001', 1, 'Dial', 'PJSIP/1001,20'),
('default', '1002', 1, 'Dial', 'PJSIP/1002,20'),
('default', '1003', 1, 'Dial', 'PJSIP/1003,20');

SELECT * FROM extensions_table;

-- DROP TABLE `extensions_table`;

SELECT * FROM extensions_table WHERE context='default';


SHOW TABLES;
select * from ps_endpoints;
select * from ps_auths;
select * from ps_aors;
select * from extensions_table;


ALTER TABLE ps_endpoints DROP COLUMN mailboxes;
ALTER TABLE ps_endpoints DROP COLUMN mohsuggest;

ALTER TABLE ps_endpoints ADD mohsuggest VARCHAR(40);
ALTER TABLE ps_endpoints ADD mailboxes VARCHAR(255);
UPDATE ps_endpoints SET mohsuggest = 'default' WHERE id IN ('1001', '1002', '1003');

UPDATE ps_aors SET max_contacts = 1 WHERE id = '1001';

show tables;



-- voice mail usertable ---

CREATE TABLE voicemail_users (
  context VARCHAR(20),     -- Which group or environment (usually 'default')
  mailbox VARCHAR(20),     -- The voicemail box number (usually same as extension)
  password VARCHAR(20),    -- PIN to access the voicemail
  fullname VARCHAR(50),    -- User’s name
  email VARCHAR(100)       -- Where to send the voicemail recording
);

INSERT INTO voicemail_users (context, mailbox, password, fullname, email)
VALUES 
  ('default', '1001', '1234', 'User One', 'djangod56@gmail.com'),
  ('default', '1002', '1234', 'User Two', 'djangod56@gmail.com'),
  ('default', '1003', '1234', 'User Three','djangod56@gmail.com');

select * from voicemail_users;

-- table end --



INSERT INTO extensions_table (context, exten, priority, app, appdata) VALUES
('default', '1001', 30, 'VoiceMail', '1001@default,u'),
('default', '1001', 40, 'Hangup', ''),
('default', '1002', 30, 'VoiceMail', '1002@default,u'),
('default', '1002', 40, 'Hangup', ''),
('default', '1003', 30, 'VoiceMail', '1003@default,u'),
('default', '1003', 40, 'Hangup', '');

select * from extensions_table; 

SHOW INDEXES FROM extensions_table;

ALTER TABLE extensions_table DROP INDEX exten;


ALTER TABLE extensions_table DROP PRIMARY KEY;

ALTER TABLE extensions_table ADD PRIMARY KEY (context, exten, priority);

ALTER TABLE extensions_table ADD UNIQUE INDEX unique_exten (context, exten, priority);

SELECT * FROM extensions_table WHERE exten IN ('1001', '1002', '1003') ORDER BY exten, priority;


INSERT INTO extensions_table (context, exten, priority, app, appdata)
VALUES ('default', '555', 2, 'Playback', 'vm-theperson');

delete from extensions_table where appdata = 'vm-theperson';
select * from voicemail_users;
select * from extensions_table;

SHOW TABLES;
SELECT * FROM extensions_table WHERE context = 'default' ORDER BY exten, priority;

DESCRIBE extensions_table;
SELECT * FROM extensions_table WHERE context = 'default' AND exten = '1003';


SHOW INDEXES FROM extensions_table;





UPDATE extensions_table
SET appdata = CONCAT(SUBSTRING_INDEX(appdata, ',', 1), ',su')
WHERE app = 'VoiceMail' AND priority = 2;


select * from extensions_table;

delete from extensions_table where exten ='9999';

UPDATE extensions_table
SET appdata = CONCAT(SUBSTRING_INDEX(appdata, '@', 1), '@default,s')
WHERE app = 'VoiceMail';
SELECT * FROM voicemail_users WHERE mailbox = '1002';
show tables;
select * from voicemail_users;



-- changes in dialplan ---

INSERT INTO extensions_table (context, exten, priority, app, appdata)
VALUES
('default', '1002', 6, 'GotoIf', '${DIALSTATUS}=BUSY?default,1002,30'),
('default', '1002', 7, 'GotoIf', '${DIALSTATUS}=CHANUNAVAIL?default,1002,30'),
('default', '1002', 8, 'GotoIf', '${DIALSTATUS}=NOANSWER?default,1002,30');

INSERT INTO extensions_table (context, exten, priority, app, appdata)
VALUES
('default', '1003', 6, 'GotoIf', '${DIALSTATUS}=BUSY?default,1003,30'),
('default', '1003', 7, 'GotoIf', '${DIALSTATUS}=CHANUNAVAIL?default,1003,30'),
('default', '1003', 8, 'GotoIf', '${DIALSTATUS}=NOANSWER?default,1003,30');

select * from extensions_table;


UPDATE extensions_table
SET appdata = '${DIALSTATUS}=BUSY?default,1002,30'
WHERE exten = '1002' AND priority = 6;


UPDATE extensions_table
SET appdata = '${DIALSTATUS}=CHANUNAVAIL?default,1002,30'
WHERE exten = '1002' AND priority = 7;

UPDATE extensions_table
SET appdata = '${DIALSTATUS}=NOANSWER?default,1002,30'
WHERE exten = '1002' AND priority = 8;

UPDATE extensions_table
SET appdata = '${DIALSTATUS}=BUSY?default,1003,30'
WHERE exten = '1003' AND priority = 6;

UPDATE extensions_table
SET appdata = '${DIALSTATUS}=CHANUNAVAIL?default,1003,30'
WHERE exten = '1003' AND priority = 7;

UPDATE extensions_table
SET appdata = '${DIALSTATUS}=NOANSWER?default,1003,30'
WHERE exten = '1003' AND priority = 8;


INSERT INTO extensions_table (context, exten, priority, app, appdata)
VALUES ('default', '1002', 3, 'Goto', 'default,1002,6');

INSERT INTO extensions_table (context, exten, priority, app, appdata)
VALUES ('default', '1003', 3, 'Goto', 'default,1003,6');


-- change end ---------------


desc extensions_table;
select * from extensions_table;


-- id|context|exten|priority|app        |appdata                                  |
-- --+-------+-----+--------+-----------+-----------------------------------------+
--  1|default|1001 |       2|Dial       |PJSIP/1001,20,m(default)                 |
--  2|default|1002 |       2|Dial       |PJSIP/1002,20,m(default)                 |
--  3|default|1003 |       2|Dial       |PJSIP/1003,20,m(default)                 |
--  4|default|1001 |       1|MixMonitor |1001-${UNIQUEID}.wav,b                   |
--  5|default|1002 |       1|MixMonitor |1002-${UNIQUEID}.wav,b                   |
--  6|default|1003 |       1|MixMonitor |1003-${UNIQUEID}.wav,b                   |
--  8|default|1001 |       3|GotoIf     |${DIALSTATUS}=BUSY?default,1002,1        |
--  9|default|1001 |       4|GotoIf     |${DIALSTATUS}=CHANUNAVAIL?default,1002,1 |
-- 10|default|1001 |       5|GotoIf     |${DIALSTATUS}=NOANSWER?default,1002,1    |
-- 11|default|1001 |      20|MusicOnHold|default                                  |
-- 12|default|1002 |      20|MusicOnHold|default                                  |
-- 13|default|1003 |      20|MusicOnHold|default                                  |
-- 14|default|1001 |      30|VoiceMail  |1001@default,u                           |
-- 15|default|1001 |      40|Hangup     |                                         |
-- 16|default|1002 |      30|VoiceMail  |1002@default,u                           |
-- 17|default|1002 |      40|Hangup     |                                         |
-- 18|default|1003 |      30|VoiceMail  |1003@default,u                           |
-- 19|default|1003 |      40|Hangup     |                                         |
-- 20|default|1002 |       6|GotoIf     |${DIALSTATUS}=BUSY?default,1002,30       |
-- 21|default|1002 |       7|GotoIf     |${DIALSTATUS}=CHANUNAVAIL?default,1002,30|
-- 22|default|1002 |       8|GotoIf     |${DIALSTATUS}=NOANSWER?default,1002,30   |
-- 23|default|1003 |       6|GotoIf     |${DIALSTATUS}=BUSY?default,1003,30       |
-- 24|default|1003 |       7|GotoIf     |${DIALSTATUS}=CHANUNAVAIL?default,1003,30|
-- 25|default|1003 |       8|GotoIf     |${DIALSTATUS}=NOANSWER?default,1003,30   |
-- 26|default|1002 |       3|Goto       |default,1002,6                           |
-- 27|default|1003 |       3|Goto       |default,1003,6                           |


SELECT * FROM extensions_table
WHERE context = 'conscious-handoff';

USE asterisk_db;
SELECT context, exten, priority, app, appdata 
FROM extensions_table 
WHERE context = 'conscious-handoff';

select * from extensions_table;


-- -- -- -- forwarding -- -- -- -- 


-- 1001 to 1002 if not answered or unavailable
INSERT INTO extensions_table (context, exten, priority, app, appdata) 
VALUES ('default', '1001', 2, 'Dial', 'PJSIP/1001,20,m(default)');

INSERT INTO extensions_table (context, exten, priority, app, appdata) 
VALUES ('default', '1003', 2, 'Dial', 'PJSIP/1003,20,m(default)');

-- MixMonitor for each extension
INSERT INTO extensions_table (context, exten, priority, app, appdata)
VALUES ('default', '1001', 1, 'MixMonitor', '1001-${UNIQUEID}.wav,b');

INSERT INTO extensions_table (context, exten, priority, app, appdata)
VALUES ('default', '1002', 1, 'MixMonitor', '1002-${UNIQUEID}.wav,b');

INSERT INTO extensions_table (context, exten, priority, app, appdata)
VALUES ('default', '1003', 1, 'MixMonitor', '1003-${UNIQUEID}.wav,b');

-- Redirection for Busy, NoAnswer, etc.
INSERT INTO extensions_table (context, exten, priority, app, appdata)
VALUES ('default', '1001', 3, 'GotoIf', '${DIALSTATUS}=BUSY?default,1002,1');

INSERT INTO extensions_table (context, exten, priority, app, appdata)
VALUES ('default', '1001', 4, 'GotoIf', '${DIALSTATUS}=CHANUNAVAIL?default,1002,1');

INSERT INTO extensions_table (context, exten, priority, app, appdata)
VALUES ('default', '1001', 5, 'GotoIf', '${DIALSTATUS}=NOANSWER?default,1002,1');

-- Music on Hold
INSERT INTO extensions_table (context, exten, priority, app, appdata)
VALUES ('default', '1001', 20, 'MusicOnHold', 'default');

INSERT INTO extensions_table (context, exten, priority, app, appdata)
VALUES ('default', '1002', 20, 'MusicOnHold', 'default');

INSERT INTO extensions_table (context, exten, priority, app, appdata)
VALUES ('default', '1003', 20, 'MusicOnHold', 'default');

-- Voicemail and Hangup
INSERT INTO extensions_table (context, exten, priority, app, appdata)
VALUES ('default', '1001', 30, 'VoiceMail', '1001@default,u');

INSERT INTO extensions_table (context, exten, priority, app, appdata)
VALUES ('default', '1001', 40, 'Hangup', '');

INSERT INTO extensions_table (context, exten, priority, app, appdata)
VALUES ('default', '1002', 30, 'VoiceMail', '1002@default,u');

INSERT INTO extensions_table (context, exten, priority, app, appdata)
VALUES ('default', '1002', 40, 'Hangup', '');

INSERT INTO extensions_table (context, exten, priority, app, appdata)
VALUES ('default', '1003', 30, 'VoiceMail', '1003@default,u');

INSERT INTO extensions_table (context, exten, priority, app, appdata)
VALUES ('default', '1003', 40, 'Hangup', '');


-- -- -- -- forwarding end -- -- -- 
