//
//  AnswerViewController.m
//  Lighting
//
//  Created by 曹云霄 on 2016/12/7.
//  Copyright © 2016年 上海勾芒科技有限公司. All rights reserved.
//

#import "AnswerViewController.h"
#import "AssessmentShortAnswerTableViewCell.h"
#import "AssessmentHeaderView.h"
#import "AssessmentTableViewCell.h"
#import "AssessmentShortAnswerTableViewCell.h"
#import "BreakThroughFinishViewController.h"


@interface AnswerViewController ()<UITableViewDelegate,UITableViewDataSource,WYPopoverControllerDelegate,CompeteDelegate>


@property (nonatomic,strong) WYPopoverController *popover;

/**
 闯关详情
 */
@property (nonatomic,strong) TOPassLevelEntity *emigrated;

/**
 当前加载section
 */
@property (nonatomic,assign) NSInteger sectionPage;

@end

@implementation AnswerViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self uiConfigAction];
    [self getPassLevelDeltails];
}

#pragma mark - UI
- (void)uiConfigAction
{
    self.answerTableView.backgroundColor = [UIColor clearColor];
}

#pragma mark - 查询题型
- (void)getPassLevelDeltails
{
    WS(weakSelf);
    [XBLoadingView showHUDViewWithDefault];
    [HTTP networkWithDictionaryRequestWithURL:[NSString stringWithFormat:SERVERREQUESTURL(GETPASSLEVELDETAILS),self.entity.fid] withRequestType:ONE withParameter:nil withReturnValueBlock:^(id returnValue) {
        [XBLoadingView hideHUDViewWithDefault];
        if (RESULT(returnValue)) {
            weakSelf.emigrated = [[TOPassLevelEntity alloc] initWithDictionary:RESPONSE(returnValue) error:nil];
            [weakSelf.answerTableView reloadData];
        }else {
            [XBLoadingView showHUDViewWithText:MESSAGE(returnValue)];
        }
        
    } withFailureBlock:^(NSError *error) {
        [XBLoadingView showHUDViewWithText:error.localizedDescription];
    }];
}

#pragma mark - <UITableViewDelegate,UITableViewDataSource>
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CustomTOPassLevelTopicEntity *entity = self.emigrated.topics[self.sectionPage];
    if ([entity.topicType isEqualToString:PASSLEVELTOPICTYPE_GAPFILLING] || [entity.topicType isEqualToString:PASSLEVELTOPICTYPE_SHORTANSWER]) {
        AssessmentShortAnswerTableViewCell *shortAnswerCell = [tableView dequeueReusableCellWithIdentifier:@"AssessmentShortAnswerTableViewCell" forIndexPath:indexPath];
        shortAnswerCell.entity = entity;
        shortAnswerCell.backgroundColor = [UIColor clearColor];
        return shortAnswerCell;
    }
    AssessmentTableViewCell *assessmentCell = [tableView dequeueReusableCellWithIdentifier:@"AssessmentTableViewCell" forIndexPath:indexPath];
    assessmentCell.backgroundColor = [UIColor clearColor];
    assessmentCell.emigratedEntity = entity.options[indexPath.row];
    return assessmentCell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    CustomTOPassLevelTopicEntity *entity = self.emigrated.topics[self.sectionPage];
    return entity.titleHeight;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CustomTOPassLevelTopicEntity *entity = self.emigrated.topics[self.sectionPage];
    if (entity.options.count) {
        CustomTOPassLevelTopicOptionEntity *answer = entity.options[indexPath.row];
        return answer.answerHeight;
    }
    return 200;
}

- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath*)indexPath
{
    if ([cell isKindOfClass:[AssessmentShortAnswerTableViewCell class]]) {
        AssessmentShortAnswerTableViewCell *shortAnswerCell = (AssessmentShortAnswerTableViewCell *)cell;
        shortAnswerCell.shortAnswerTextView.text = nil;
    }
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return ONE;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    CustomTOPassLevelTopicEntity *entity = self.emigrated.topics[self.sectionPage];
    if ([entity.topicType isEqualToString:PASSLEVELTOPICTYPE_GAPFILLING] || [entity.topicType isEqualToString:PASSLEVELTOPICTYPE_SHORTANSWER]) {
        return ONE;
    }
    return entity.options.count;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    AssessmentHeaderView *headerView = [tableView dequeueReusableCellWithIdentifier:@"AssessmentHeaderView"];
    headerView.emigratedEntity = self.emigrated.topics[self.sectionPage];
    return headerView.contentView;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    CustomTOPassLevelTopicEntity *entitys = self.emigrated.topics[self.sectionPage];
    if ([entitys.topicType isEqualToString:STUDYTOPICTYPE_SINGLE] || [entitys.topicType isEqualToString:STUDYTOPICTYPE_TRUEORFALSE]) {
        for (int i=0; i<entitys.options.count; i++) {
            CustomTOPassLevelTopicOptionEntity *entity = entitys.options[i];
            if (i == indexPath.row) {
                entity.isSelected = !entity.isSelected;
            }else {
                entity.isSelected = NO;
            }
       }
    }else if ([entitys.topicType isEqualToString:STUDYTOPICTYPE_MULTIPLE]) {
        CustomTOPassLevelTopicOptionEntity *answer = entitys.options[indexPath.row];
        answer.isSelected = !answer.isSelected;
    }
    [self.answerTableView reloadData];
}

#pragma mark - 下一步<最后一道题自动提交>
- (IBAction)nextButtonClickAction:(UIButton *)sender {

    if (self.sectionPage == self.emigrated.topics.count-1) {
        [self submitAnswer];
    }else {
        if (![self judgeIsAnswer]) {
            [XBLoadingView showHUDViewWithText:@"答案不能为空"];return;
        }
        self.sectionPage += ONE;
        [self.answerTableView reloadData];
    }
}

#pragma mark - 判断是否已回答
- (BOOL)judgeIsAnswer
{
    CustomTOPassLevelTopicEntity *entitys = self.emigrated.topics[self.sectionPage];
    //简答题/填空题
    if ([entitys.topicType isEqualToString:PASSLEVELTOPICTYPE_SHORTANSWER] || [entitys.topicType isEqualToString:PASSLEVELTOPICTYPE_GAPFILLING]) {
        return ![[self class] isBlankString:entitys.answer];
    }
    //单选、多选、判断
    for (CustomTOPassLevelTopicOptionEntity *answer in entitys.options) {
        if (answer.isSelected) {
            return YES;
        }
    }
    return NO;
}

#pragma mark - 提交答案
- (void)submitAnswer
{
    if ([self.delegate respondsToSelector:@selector(dismissController:)]) {
        [self.delegate dismissController:NO];
    }
    TOPassLevelResultEntity *studyResult = [[TOPassLevelResultEntity alloc]init];
    studyResult.passLevelId = self.entity.fid;
    studyResult.submitTime = [[self class] getTimeby:0];
    studyResult.employeeId = [Shoppersmanager manager].shoppers.employee.fid;
    NSArray *answerArray = self.emigrated.topics;
    NSMutableArray *submitAnswerArray = [NSMutableArray array];
    //判断考核结果
    NSInteger allScore = 0;//总分
    for (CustomTOPassLevelTopicEntity *topicEntity in answerArray) {
        
        TOPassLevelResultDetailEntity *resultEntity = [[TOPassLevelResultDetailEntity alloc] init];
        resultEntity.topicId = topicEntity.fid;
        //多选
        if ([topicEntity.topicType isEqualToString:STUDYTOPICTYPE_MULTIPLE]) {
            NSMutableString *answers = [[NSMutableString alloc] init];
            for (CustomTOPassLevelTopicOptionEntity *entity in topicEntity.options) {
                if (entity.isSelected == YES) {
                    [answers appendFormat:@"%@,",entity.value];
                }
            }
            resultEntity.answer = answers;
            //得分
            NSArray *answersArray = [topicEntity.answer componentsSeparatedByString:@","];
            NSInteger answerNumber = 0;
            for (NSString *answer in answersArray) {
                for (CustomTOStudyTopicOptionEntity *entity in topicEntity.options) {
                    if ([answer isEqualToString:entity.value] && entity.isSelected) {
                        answerNumber += 1;
                    }
                }
            }
            if (answerNumber == answersArray.count) {
                resultEntity.grade = topicEntity.grade;
                allScore += [topicEntity.grade integerValue];
            }else {
                resultEntity.grade = @(ZERO);
            }
        }
        //判断
        if ([topicEntity.topicType isEqualToString:STUDYTOPICTYPE_TRUEORFALSE]) {
            for (CustomTOPassLevelTopicOptionEntity *entity in topicEntity.options) {
                if (entity.isSelected == YES) {
                    resultEntity.answer = entity.name;
                    if ([topicEntity.answer isEqualToString:entity.name]) {
                        resultEntity.grade = topicEntity.grade;
                        allScore += [topicEntity.grade integerValue];
                    }else {
                        resultEntity.grade = @(ZERO);
                    }
                }
            }
        }
        //单选
        if ([topicEntity.topicType isEqualToString:STUDYTOPICTYPE_SINGLE]) {
            for (CustomTOPassLevelTopicOptionEntity *entity in topicEntity.options) {
                if (entity.isSelected == YES) {
                    resultEntity.answer = entity.value;
                    if ([topicEntity.answer isEqualToString:entity.value]) {
                        resultEntity.grade = topicEntity.grade;
                        allScore += [topicEntity.grade integerValue];
                    }else {
                        resultEntity.grade = @(ZERO);
                    }
                }
            }
        }
        //填空、简答
        if ([topicEntity.topicType isEqualToString:PASSLEVELTOPICTYPE_GAPFILLING] || [topicEntity.topicType isEqualToString:PASSLEVELTOPICTYPE_SHORTANSWER]) {
                resultEntity.answer = topicEntity.answer;
                studyResult.passResult = [NSString stringWithFormat:@"%ld",Audit];//人工审核
        }
        [submitAnswerArray addObject:resultEntity];
    }
    studyResult.details = (NSArray<TOPassLevelResultDetailEntity>*)submitAnswerArray;
    studyResult.grade = [NSNumber numberWithFloat:allScore];
    if ([[self class] isBlankString:studyResult.passResult]) {
        studyResult.passResult = [NSString stringWithFormat:@"%ld",(self.emigrated.passGrade > allScore)?NotThrough:Through];
    }
    [XBLoadingView showHUDViewWithDefault];
    WS(weakSelf);
    [HTTP networkRequestWithURL:SERVERREQUESTURL(SUBMITEMIGRATEDANSWER) withRequestType:ZERO withParameter:studyResult withReturnValueBlock:^(id returnValue) {
        
        [XBLoadingView hideHUDViewWithDefault];
        if (RESULT(returnValue)) {
            [weakSelf determineIsQualified:[studyResult.grade integerValue] passResult:[studyResult.passResult integerValue]];
            if ([weakSelf.delegate respondsToSelector:@selector(emigratedFinish:)]) {
                [weakSelf.delegate emigratedFinish:studyResult.passResult];
            }
        }else{
            [XBLoadingView showHUDViewWithText:MESSAGE(returnValue)];
        }
        
    } withFailureBlock:^(NSError *error) {
        [XBLoadingView showHUDViewWithText:error.localizedDescription];
    }];
}

#pragma mark - 判断得分是否及格
- (void)determineIsQualified:(NSInteger)allScore passResult:(NSInteger)state
{
    BreakThroughFinishViewController *finish = [[[self class] getLearningCenterStoryboardClass] instantiateViewControllerWithIdentifier:@"BreakThroughFinishViewController"];
    finish.delegate = self;
    finish.preferredContentSize = CGSizeMake(520, 400);
    if (self.emigrated.passGrade > allScore && state != Audit) {
        finish.state = ZERO;
        finish.score = [NSString stringWithFormat:@"%ld",allScore];
        [self showPopoverView:finish];
        
    }else if (state == Audit) {
        finish.state = Audit;
        finish.score = [NSString stringWithFormat:@"%ld",allScore];
        [self showPopoverView:finish];
    }else {
        WS(weakSelf);
        [XBLoadingView showHUDViewWithDefault];
        NSString *url = [NSString stringWithFormat:SERVERREQUESTURL(GETINTEGRAL),RECRUITTHROUGH];
        [HTTP networkWithDictionaryRequestWithURL:url withRequestType:ONE withParameter:nil withReturnValueBlock:^(id returnValue) {
            [XBLoadingView hideHUDViewWithDefault];
            if (RESULT(returnValue)) {
                finish.state = ONE;
                finish.score = [NSString stringWithFormat:@"%ld",allScore];
                finish.integral = [NSString stringWithFormat:@"+%@",RESPONSE(returnValue)];
                [weakSelf showPopoverView:finish];
                
            }else {
                [XBLoadingView showHUDViewWithText:MESSAGE(returnValue)];
            }
            
        } withFailureBlock:^(NSError *error) {
            [XBLoadingView hideHUDViewWithDefault];
            [XBLoadingView showHUDViewWithText:error.localizedDescription];
        }];
    }
}

#pragma mark - 完成
- (void)finished
{
    [self.popover dismissPopoverAnimated:YES];
}

#pragma mark - 取消闯关
- (IBAction)exitButtonClickAction:(UIButton *)sender {
    
    WS(weakSelf);
    ShowAlertView(@"提示", @"是否退出闯关?", @[@"确认",@"取消"], UIAlertControllerStyleAlert, ^(NSInteger index) {
        if (index == ONE) {
            return;
        }
        if ([weakSelf.delegate respondsToSelector:@selector(dismissController:)]) {
            [weakSelf.delegate dismissController:YES];
        }
    });
}

#pragma mark - 弹出框
- (void)showPopoverView:(BaseViewController *)controller
{
    self.popover = [[WYPopoverController alloc] initWithContentViewController:controller];
    self.popover.theme.fillBottomColor = [UIColor clearColor];
    self.popover.theme.fillTopColor = [UIColor clearColor];
    self.popover.theme.glossShadowColor = [UIColor clearColor];
    self.popover.delegate = self;
    [self.popover presentPopoverAsDialogAnimated:YES options:WYPopoverAnimationOptionFadeWithScale];
}

#pragma mark - 点击空白禁止收起
- (BOOL)popoverControllerShouldDismissPopover:(WYPopoverController *)popoverController
{
    return NO;
}





@end
