import MySQLdb

from db import DBConnector
from model.project import project


class recipe:
    """レシピモデル"""

    def __init__(self):
        self.attr = {}
        self.attr["recipe_id"] = None         # recipe_id int
        # recipe_descripthion str notNull
        self.attr["recipe_description"] = None

    @staticmethod
    def migrate():

        # データベースへの接続とカーソルの生成
        with DBConnector(dbName=None) as con, con.cursor() as cursor:
            # データベース生成
            cursor.execute('CREATE DATABASE IF NOT EXISTS db_%s;' %
                           project.name())
            # 生成したデータベースに移動
            cursor.execute('USE db_%s;' % project.name())
            # テーブル初期化(DROP)
            cursor.execute('DROP TABLE IF EXISTS table_recipes;')
            # テーブル初期化(CREATE)
            cursor.execute("""
                CREATE TABLE `table_recipes` (
                    `recipe_id` int(100) unsigned NOT NULL AUTO_INCREMENT,
                    `recipe_description` varchar(255) NOT NULL ,
                    PRIMARY KEY (`recipe_id`)
                ); """)
            # データの追加
            cursor.execute("""
                INSERT INTO table_recipes (recipe_description)
                    VALUES ('パスタを茹でる'),('キャベツを切る'),('玉ねぎ、人参をみじん切りにする')
                          ,('キャベツを茹でる'),('肉だねをつくる'),('キャベツで巻く')
                          ,('コンソメスープで茹でる'),('大根を輪切りにする'),('鍋にお湯を沸かし酒少々入れる')
                          ,('大根を鍋に入れる'),('酒、砂糖、醤油、みりんを入れ煮る'),('バターを泡だて器で混ぜ、、砂糖を入れる')
                          ,('卵黄を加えてぐるぐると手早く回す'),('ゴムベラで粉っぽさがなくなるまで混ぜる'),('冷蔵庫で３０分寝かせる')
                          ,('焼く'),('香りのたつものから炒める'),('食材を全て入れしばらくしたら水をいれて沸かす')
                          ,('豚肉を炒める'),('他の食材を入れる'),('キャベツがしなしなになるまで炒める')
                          ,('ネギをみじん切りにする'),('小鍋に油を熱しネギを炒める'),('他の材料を加え煮立たせる')
                          ,('じゃがいもと人参は乱切り玉ねぎはくし切り、白滝は適当'),('中華鍋に油を小さじ２入れて、強火で肉色変わるまで炒める'),('煮汁の材料を入れ沸騰したら灰汁を取り白滝を入れ中火でのまま落し蓋をし、煮汁がなくなるまで、煮詰める。')
                          ,('ある程度煮詰めたところで混ぜ、再度落し蓋して煮詰める。'),('煮汁がなくなったら火を止めて、10分間程蒸らす。'),('完成！')
                          ,('鳥もも肉から脂肪、皮を取り筋を切る。'),('肉の両面に塩、黒こしょうをふり、金属製のバットに乗せて20分室温で置く。'),('にんにくは薄切りに,キャベツはひと口大の角切りにします。レモンはくし型に切ります')
                          ,('フライパンにオリーブ油とにんにくを入れて中火にかけ,にんにくが泡立ってきたら弱火にし、フライパンを傾けて横に寄せ、にんにくがきつね色になるまで揚げ、きつね色になったら取り出します。'),('同じフライパンで鶏もも肉を焼きます。弱火のまま、皮目から入れて10分以上、じっくり焼きます。フタはしません。ときどき菜箸などで肉を押さえ、皮をフライパンに密着させてやります。'),('弱火で10分焼いたら中火にします。中火で皮にカリカリとした焼き目をつけます。この時、キッチンペーパーでフライパンの余分な油を拭き取ります。')
                          ,('肉の皮目を下にしてまな板に置き、包丁でひと口大に切ります。キャベツとミニトマトを添えた皿に皮を上にして盛り付け、刻みパセリ、フライドガーリックを散らし、レモンを添えたら皮カリカリチキンステーキの完成です'),('薄力粉、ホットケーキミックス、水を合わせてよくこねて生地を作ります')
                          ,('ラップを敷き生地をおきラップをかけて挟み上から綿棒で生地を伸ばします'),('玉ねぎはスライスに、他の材料は食べやすい大きさに切り揃え皿に入れ500wのレンジで40秒チンします'),('生地をレンジに入れ500wのレンジで一分チンした後生地にケチャップを塗り材料を乗せチーズを乗せます')
                          ,('ホイルにオリーブオイルを塗り生地をおいてオーブントースターで5分焼いたら完成です。'),('クッキングミキサーに玉ねぎとトマトを入れ、3秒×3～5回のパルス運転でみじん切りにする。'),('それに合挽肉と調味料を加えよく混ぜ、ふたをして500wのレンジで2分x3-4回加熱する')
                          ,('お皿にごはんに盛り付け、中央に[2]のタコミートをのせて完成'),('玉ねぎを薄く千切りにする'),('耐熱容器にすべて投入し、ふんわりラップをしたら、レンジ500w7分加熱')
                          ,('よく混ぜてとろみがついたら完成'),('豆腐はサイの目にきっておく。'),('にんにくとしょうがはみじん切りにしておく。')
                          ,('フライパンにサラダ油を少し入れて、にんにくとしょうがを炒める。（中火）'),('ひき肉と豆板醤を追加して、色が変わるまで炒める。（中火）'),('調味料を追加して一煮立ちさせる。（中火）')
                          ,('豆腐を入れて3分煮込む。（中火）'),('水溶き片栗粉でトロみをつけて、仕上げにごま油を回し入れる。'),('丼にごはんを盛って、その上にかけてネギを散らして完成')
                          ,('玉ねぎ、ピーマンはみじん切り。ウインナーは小口切りにする'),('フライパンにサラダ油を少しひき、1の野菜等を炒め、玉ねぎが透き通ってきたら塩コショウ、ケチャップ、みりんを加えよく炒める'),('ケチャップがワントーン暗くなってきたら、ご飯を加え炒め、白いところがなくなるまでしっかり切るように炒める')
                          ,('ボールに卵、マヨネーズ、砂糖、塩コショウを加えたらよく混ぜる'),('温めたフライパンに冷たいバターわ加え、素早くまんべんなくバターをひき、そこに溶いた卵を加える。'),('ガスなら外から内側へIHなら内側から外に向かって卵を手早く混ぜながら卵液を全体に広げ先ほどのケチャップライスの上にのせる')
                          ,('のせない場合は、焼いた卵の真ん中にアーモンド型にご飯をのせオムレツを作るようにしながらご飯を半分包んだところで皿に盛る')
                    """)
            con.commit()

    @staticmethod
    def db_cleaner():
        with DBConnector(dbName=None) as con, con.cursor() as cursor:
            cursor.execute('DROP DATABASE IF EXISTS db_%s;' % project.name())
            con.commit()

    @staticmethod
    def find(_id):
        with DBConnector(dbName='db_%s' % project.name()) as con, con.cursor(MySQLdb.cursors.DictCursor) as cursor:
            cursor.execute("""
                SELECT *
                FROM   table_recipes
                WHERE  recipe_id = %s;
            """, (_id,))
            con.commit()
            results = cursor.fetchall()

        if (len(results) == 0):
            return None
        data = results[0]
        re = recipe()
        # import pdb
        # pdb.set_trace()
        re.attr["recipe_id"] = data["recipe_id"]
        re.attr["recipe_description"] = data["recipe_description"]

        return re
