package com.adobe.arise.database
{
    import flash.data.SQLConnection;
    import flash.data.SQLStatement;
    import flash.events.SQLEvent;
    import flash.data.SQLResult;
    
    public class Posts
        extends DBOperation
    {
        public function Posts(responder:DatabaseResponder, sql:XML, connection:SQLConnection)
        {
            super(responder, sql, connection);
        }

        public function getByAuthor(author:String):void
        {
            var stmt:SQLStatement = this.getSQLStatement();
            stmt.addEventListener(SQLEvent.RESULT,
                function(e:SQLEvent):void
                {
                    var dbe:DatabaseEvent = new DatabaseEvent(DatabaseEvent.RESULT_EVENT);
                    dbe.data = stmt.getResult().data;
                    responder.dispatchEvent(dbe);
                });
            stmt.text = sql.posts.selectByAuthor;
            stmt.parameters[":author"] = author;
            stmt.execute();
        }

        public function getByTopic(topic:String):void
        {
            var stmt:SQLStatement = this.getSQLStatement();
            stmt.addEventListener(SQLEvent.RESULT,
                function(e:SQLEvent):void
                {
                    var dbe:DatabaseEvent = new DatabaseEvent(DatabaseEvent.RESULT_EVENT);
                    dbe.data = stmt.getResult().data;
                    responder.dispatchEvent(dbe);
                });
            stmt.text = sql.posts.selectByTopic;
            stmt.parameters[":topic"] = topic;
            stmt.execute();
        }

        public function getByFeed(feedId:Number):void
        {
            var stmt:SQLStatement = this.getSQLStatement();
            stmt.addEventListener(SQLEvent.RESULT,
                function(e:SQLEvent):void
                {
                    var dbe:DatabaseEvent = new DatabaseEvent(DatabaseEvent.RESULT_EVENT);
                    dbe.data = stmt.getResult().data;
                    responder.dispatchEvent(dbe);
                });
            stmt.text = sql.posts.selectByFeed;
            stmt.parameters[":feed_id"] = feedId;
            stmt.execute();
        }

        public function getBySearch(term:String):void
        {
            var stmt:SQLStatement = this.getSQLStatement();
            stmt.addEventListener(SQLEvent.RESULT,
                function(e:SQLEvent):void
                {
                    var dbe:DatabaseEvent = new DatabaseEvent(DatabaseEvent.RESULT_EVENT);
                    dbe.data = stmt.getResult().data;
                    responder.dispatchEvent(dbe);
                });
            stmt.text = sql.posts.search;
            stmt.parameters[":search_term"] = "%"+term+"%";
            stmt.execute();
        }

        public function getAllUnread():void
        {
            var stmt:SQLStatement = this.getSQLStatement();
            stmt.addEventListener(SQLEvent.RESULT,
                function(e:SQLEvent):void
                {
                    var dbe:DatabaseEvent = new DatabaseEvent(DatabaseEvent.RESULT_EVENT);
                    dbe.data = stmt.getResult().data;
                    responder.dispatchEvent(dbe);
                });
            stmt.text = sql.posts.selectUnread;
            stmt.execute();
        }

        public function getAllChecked():void
        {
            var stmt:SQLStatement = this.getSQLStatement();
            stmt.addEventListener(SQLEvent.RESULT,
                function(e:SQLEvent):void
                {
                    var dbe:DatabaseEvent = new DatabaseEvent(DatabaseEvent.RESULT_EVENT);
                    dbe.data = stmt.getResult().data;
                    responder.dispatchEvent(dbe);
                });
            stmt.text = sql.posts.selectChecked;
            stmt.execute();
        }

        public function getAllScrapbooked():void
        {
            var stmt:SQLStatement = this.getSQLStatement();
            stmt.addEventListener(SQLEvent.RESULT,
                function(e:SQLEvent):void
                {
                    var dbe:DatabaseEvent = new DatabaseEvent(DatabaseEvent.RESULT_EVENT);
                    dbe.data = stmt.getResult().data;
                    responder.dispatchEvent(dbe);
                });
            stmt.text = sql.posts.selectScrapbooked;
            stmt.execute();
        }

        public function getContentById(postId:Number):void
        {
            var stmt:SQLStatement = this.getSQLStatement();
            stmt.addEventListener(SQLEvent.RESULT,
                function(e:SQLEvent):void
                {
                    var dbe:DatabaseEvent = new DatabaseEvent(DatabaseEvent.RESULT_EVENT);
                    dbe.data = stmt.getResult().data;
                    responder.dispatchEvent(dbe);
                });
            stmt.text = sql.posts.selectContentById;
            stmt.parameters[":post_id"] = postId;
            stmt.execute();
        }

        public function countUnread():void
        {
            var stmt:SQLStatement = this.getSQLStatement();
            stmt.addEventListener(SQLEvent.RESULT,
                function(e:SQLEvent):void
                {
                    var dbe:DatabaseEvent = new DatabaseEvent(DatabaseEvent.RESULT_EVENT);
                    var res:SQLResult = stmt.getResult();
                    dbe.data = res.data[0].unread;
                    responder.dispatchEvent(dbe);
                });
            stmt.text = sql.posts.countUnread;
            stmt.execute();            
        }

        public function countScrapbooked():void
        {
            var stmt:SQLStatement = this.getSQLStatement();
            stmt.addEventListener(SQLEvent.RESULT,
                function(e:SQLEvent):void
                {
                    var dbe:DatabaseEvent = new DatabaseEvent(DatabaseEvent.RESULT_EVENT);
                    dbe.data = stmt.getResult().data[0].scrapbooked;
                    responder.dispatchEvent(dbe);
                });
            stmt.text = sql.posts.countScrapbooked;
            stmt.execute();            
        }

        public function countChecked():void
        {
            var stmt:SQLStatement = this.getSQLStatement();
            stmt.addEventListener(SQLEvent.RESULT,
                function(e:SQLEvent):void
                {
                    var dbe:DatabaseEvent = new DatabaseEvent(DatabaseEvent.RESULT_EVENT);
                    dbe.data = stmt.getResult().data[0].checked;
                    responder.dispatchEvent(dbe);
                });
            stmt.text = sql.posts.countChecked;
            stmt.execute();            
        }

        public function changeReadFlag(read:Boolean, postId:Number):void
        {
            var stmt:SQLStatement = this.getSQLStatement();
            stmt.addEventListener(SQLEvent.RESULT,
                function(e:SQLEvent):void
                {
                    var dbe:DatabaseEvent = new DatabaseEvent(DatabaseEvent.RESULT_EVENT);
                    responder.dispatchEvent(dbe);
                });
            stmt.text = sql.posts.updateRead;
            stmt.parameters[":post_id"] = postId;
            stmt.parameters[":read"] = (read) ? 1 : 0;
            stmt.execute();            
        }

        public function changeChecked(checked:Boolean, postId:Number):void
        {
            var stmt:SQLStatement = this.getSQLStatement();
            stmt.addEventListener(SQLEvent.RESULT,
                function(e:SQLEvent):void
                {
                    var dbe:DatabaseEvent = new DatabaseEvent(DatabaseEvent.RESULT_EVENT);
                    responder.dispatchEvent(dbe);
                });
            stmt.text = sql.posts.updateChecked;
            stmt.parameters[":post_id"] = postId;
            stmt.parameters[":checked"] = (checked) ? 1 : 0;
            stmt.execute();            
        }
    }
}